Leaking dies im Konstruktor Warnung

Ich möchte (die meisten) Warnungen von Netbeans 6.9.1 vermeiden, und ich habe ein Problem mit dem'Leaking this in constructor' Warnung

Ich verstehe das Problem, rufe eine Methode im Konstruktor auf und übergebe "this "ist gefährlich, da"this "wurde möglicherweise nicht vollständig initialisiert.

Es war einfach, die Warnung in meinen Singleton-Klassen zu korrigieren, da der Konstruktor privat ist und nur von derselben Klasse aufgerufen wird.

Alter Code (vereinfacht):

private Singleton() {
  ...
  addWindowFocusListener(this);
}

public static Singleton getInstance() {

  ...
  instance = new Singleton();
  ...
}

Neuer Code (vereinfacht):

private Singleton() {
  ...
}

public static Singleton getInstance() {

  ...
  instance = new Singleton();
  addWindowFocusListener( instance );
  ...
}

Dieser Fix funktioniert nicht, wenn der Konstruktor öffentlich ist und von anderen Klassen aufgerufen werden kann. Wie ist es möglich, den folgenden Code zu korrigieren:

public class MyClass {

  ...
  List<MyClass> instances = new ArrayList<MyClass>();
  ...

  public MyClass() {
    ...
    instances.add(this);
  }

}

Natürlich möchte ich einen Fix, bei dem nicht alle meine Codes mit dieser Klasse geändert werden müssen (z. B. durch Aufrufen einer init-Methode).

Antworten auf die Frage(20)

Ihre Antwort auf die Frage