内部ヘルパー クラスがあり、次のように、その新しいインスタンスを含むクラスのマップに追加したいと考えています。
public class SomeService {
private final Map<Integer, ServiceTask> pendingTasksByKey;
private class ServiceTask {
private ServiceTask(int key) {
// initialization...
pendingTasksByKey.put(key, this);
}
}
// the rest of the code follows
}
this
これを行うと、NetBeansはコンストラクターでの使用について不平を言います。わかりました。誰かが私のクラスを拡張する可能性がありthis
、不完全に初期化されたオブジェクトを参照してリークする可能性があるため、一般的なケースでは危険な慣行です。この警告をオフにしたくなかったので、クラスを作成できると考えましたfinal
。この方法では、誰も私のクラスを拡張することはできません。したがって、this
この時点で初期化が完了するため、 を使用するのはかなり安全です。しかし、内部クラスを としてマークしても、NetBeans は依然として警告を表示しfinal
ます。
私は正しいですか、それとも見逃したことがありますか?NetBeans がうるさすぎるだけですか? マルチスレッド メモリ モデルの問題の可能性以外に、そのような使用法による危険性は考えられませんthis
。