是否存在不应在常规try块上使用try-with-resources的实例?

时间:2014-08-22 08:37:16

标签: java oop try-catch try-with-resources

例如,如果需要在不同对象中传递资源实例,该怎么办?

由于try-for-resource的设计是(合理地)构建的,以限制其成员的范围,有人会如何处理这种设计问题?

仍然使用try-with-resources并不断传递实例? 使用常规的try-catch-finally块并将成员保持在其范围之外?

3 个答案:

答案 0 :(得分:0)

来自DOC: "资源是在程序完成后必须关闭的对象。 try-with-resources语句可确保在语句末尾关闭每个资源。任何实现java.lang.AutoCloseable的对象(包括实现java.io.Closeable的所有对象)都可以用作资源。"

如果您想要一个您需要整个资源的设计,请不要使用try-with-resources,而是将资源保留在外部并在简单try-catch内使用它。 但是如果你使用这个策略,请确保你做了必要的 CLEANUP

此外,如果使用传统的try-catch,则可能需要更频繁地编写嵌套的try-catch块。(关闭资源也会引发Exception

答案 1 :(得分:0)

正如Ray所说,这个问题有点抽象。我想到了两种情况:

  • 对资源的本地引用:使用try-with-resources 当然,您可以将资源传递给try-block中的其他方法。
  • 引用资源的成员变量:考虑实现AutoCloseable,以便可以在try-with-resources块中使用类本身的实例。

答案 2 :(得分:0)

不应始终使用资源,必须在创建可关闭对象时使用。即使你有一个传入的对象,这意味着调用者必须有一个try-catch块,在其中调用你的方法。然后外部调用者的try-catch将关闭该对象。