AutoCloseable でないリソース
このコードを実行するとどうなるか。
public class Main {
public static void main(String[] args) {
try (Box b = new Box()) {
System.out.println("ok");
}
}
}
class Box {
public void close() { }
}
- A
okと出力される - B 実行時に例外が発生する
- C コンパイルエラーになる
- D 何も出力されない
正解と解説を見る
正解: C
- A: Box は AutoCloseable を実装していないので、コンパイルエラーです。実行まで進まないので、何も出力されません。
- B: コンパイルの時点でエラーになるので、実行時の例外にはなりません。
- C: try-with-resources に書けるのは AutoCloseable (または Closeable) を実装したクラスだけです。close() があるだけではコンパイルエラーになります。
- D: コンパイルエラーなので実行できません。
ポイント
- try-with-resources に書けるのは AutoCloseable (または Closeable) を実装したクラスだけです。close メソッドがあるだけでは足りません。
「try-with-resources 文による例外処理」をこのサイトで解く (記録・間違えた問題の解き直し・AI教師への質問)