对已经构造的对象使用java try-with-resources

时间:2014-10-28 19:43:43

标签: java

我非常喜欢java的try-with-resources行为。我想知道是否有可能对已经构建的资源使用相同的行为?例如,如果我必须在某些资源上调用open(),我可以将其作为try-with-resource的一部分调用,并且仍然可以自动关闭,或者甚至只是在我打开它之后传递资源以使其关闭。

我怀疑答案是否定的,但只是想确保我知道任何有用的语法。

2 个答案:

答案 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
}