2

私はEffective Javaの本を読んでいて、項目7で次のことを見つけました: ファイナライザーを避けるセクション:

明示的な終了メソッド パターンの例として挙げられている 4 つのクラス (FileInputStream、FileOutputStream、Timer、および Connection) には、終了メソッドが呼び出されない場合のセーフティ ネットとして機能するファイナライザーがあります。残念ながら、これらのファイナライザは警告を記録しません。このような警告は、通常、API の公開後に追加することはできません。これは、既存のクライアントを壊すように見えるためです。

私の質問はどうですか?これが起こると私が想像できる唯一の方法は、クライアントが Java プロセスの出力を解析していて、これらの余分な警告が何らかの形で解析を中断する可能性がある場合です。

これには別の理由がありますか。

4

1 に答える 1

0

実際、私はその理由を知っていると思います。本は言う:

既存のクライアントを壊すように見える

ここで暗示されているのは、今まで正常に動作していたクライアントが突然警告メッセージを出し始め、警告がファイナライザー メソッドからのものであるため、それもランダムな時間に発生するということです。これにより、クライアントに何か問題が発生したように見えます。

ここで重要なのは「現れる」という言葉です。これが原因でクライアント ロジックが実際に壊れるケースは考えられません。壊れているように見えるだけです。

于 2013-02-16T15:32:58.260 に答える