JoshuaBlochの著書「EffectiveJava」の第7版では、特にファイルを閉じるためにfinallyステートメントを使用しないようにアドバイスしています。「ファイルを閉じるためにファイナライザーに依存するのは重大なエラーです」。2ページ後、彼は、それが正当である2つのユースケースの1つは、明示的な終了メソッドパターンにあると述べています。
Foo foo = new Foo();
try{
///process foo
} finally{
foo.terminate();
}
終了メソッドを持つクラスには、FileInputStreamとFileOutputStreamが含まれます。つまり、finallyステートメントでファイルを閉じるということではないでしょうか。
1)Joshua Blochのアイテム7は矛盾していますか?
2)終了方法のパターンは必要ですか?同じ効果を持つfinallyステートメントなしで上記のコードを書くことはできませんか?