我非常喜欢java的try-with-resources行为。我想知道是否有可能对已经构建的资源使用相同的行为?例如,如果我必须在某些资源上调用open(),我可以将其作为try-with-resource的一部分调用,并且仍然可以自动关闭,或者甚至只是在我打开它之后传递资源以使其关闭。
我怀疑答案是否定的,但只是想确保我知道任何有用的语法。
答案 0 :(得分:1)
您可以这样做......重要的是您的资源在声明中声明;这意味着你可以这样做:
final Foo toBeOpened = ...;
toBeOpened.open();
try (
final Foo opened = toBeOpened;
) {
/* work with opened */
}
答案 1 :(得分:1)
如果open()
方法返回一个实现AutoCloseable 和的对象,则在调用open()
后关闭资源是合法的,这将起作用。这里没有魔法。
try (MyAutoCloseable resource = Foo.open()) {
// .. do your work
}