私は自分のコードをモジュール化しようとしていますが、AutoCloseableを実装しているオブジェクトを渡しています。私はfoo1のからfoo2はを呼び出すだけでなく、他のクラスが別途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は2つのパブリックメソッドを持っているとしましょう。
public class OtherClass {
public void doSomething() {
MyClass myClass = new MyClass();
myClass.foo2(createConnection());
}
}
これは、foo2()の呼び出し後にfoo1()で接続が閉じられることになりますか?または、try-with-resourceを呼び出しメソッド(例えば、OtherClassのdoSomething()など)に配置する必要がありますか?
試してみる価値とは、と '..試すfinally'のためだけsyntaxic糖であります'finally'の' close'を呼び出します。だからそれは 'foo2'の呼び出しの後に閉じられます。 – litelite
申し訳ありませんが、foo2もコンパイルしますか?私のIDEは確かに私にそれを許可しません。そして、私が言語仕様で見ることができる限り、try-with-resourcesは中括弧で宣言された新しい変数を必要とします。 – Ordous