我試圖模塊化我的代碼,但它涉及傳遞實現AutoCloseable的對象。讓說我有foo1和foo2的兩個公共方法:在具有相同AutoCloseable對象的多個方法中使用try-with-resources
public class MyClass {
public void foo1() {
// Connection implements AutoCloseable
try (Connection conn = createConnection()) {
foo2(conn);
// is the connection closed or the behavior unpredictable?
conn.doSomethingElse();
}
}
public void foo2(Connection conn) {
try (conn) {
// do something with the Connection
}
}
}
我想打電話從foo1 foo2的同時,也讓其他類單獨使用foo2的。
public class OtherClass {
public void doSomething() {
MyClass myClass = new MyClass();
myClass.foo2(createConnection());
}
}
這是否導致連接在調用foo2之後在foo1()中關閉?還是應該將try-with-resources放在調用方法中(比如OtherClass中的doSomething())?
與值一試只是一個syntaxic糖的'嘗試.. finally'用在'finally'中調用'close'。所以是的,它會在調用'foo2'後關閉。 – litelite
對不起,但foo2甚至編譯?我的IDE當然不允許我這樣做。就我在語言規範中看到的一個嘗試使用資源需要在大括號中聲明的新變量而言。 – Ordous