は、だから私はすべてのautocloseableインターフェースについて読み、リソースと試みるが、それは私が思ってしまうしました:私はAutoCloseableを実装するクラスをラップする(忘れた)していない場合はどうなりますAutoCloseableとガベージコレクションの関係
何そのクラスを使用するコード内のリソースで試してみてください。しかしそのクラスはOSからリソースを取っていますか? JVMがいつガベージコレクタを呼び出すべきかを決定する保証はありませんが、そうした場合、close()メソッドが呼び出されますか?
もしそうでなければ、これは私がC++のデストラクタを見逃す場所ですか? :) オブジェクトが解放されると(例えばスコープから外れて)、それが取ったすべてのOSリソースを解放するということは、そのクラスのコードではなく、ユーザーのコードではないことを確認する同様の方法はありますか?
お返事ありがとうございますが、私の部分の主な混乱の点は変わっていません。私はユーザーコードに頼りたくはありません。ユーザーは、そのクラスを使用するコードです。そのため、どこかの人が明示的にclose()を呼び出すことや、try-with-resourcesを使用することを忘れると、災害は発生しません。 close()を使用してfinalize()を使用すると、ガベージコレクタの実装が行われたのでしょうか?繰り返しますが、OSリソースを使用するクラスのデザイナーとして、私は忘れてしまったユーザーでも問題ないように最善を尽くしたいと思っています。私は意味があることを願っています。 –
私の(マイナー)編集を参照してください。 – Kayaman
ここでは何も役に立ちません。あなたは 'finalize'を実装することができますが、APIを壊してしまったOSリソースと直接インターフェースをとっているのであれば、それは実現するでしょう。あなたが 'java.'パッケージからAPIを使用している場合、最後の手段としての' finalize'実装がほぼ確実に実現されます。あなた自身を書くことから得ることは何もありません。 – Tim