Я бы хотел избежать (большинства) предупреждений Netbeans 6.9.1, и у меня возникла проблема с предупреждением 'Leaking this in constructor'
.
Я понимаю проблему, вызов метода в конструкторе и передача "this
" опасна, поскольку "this
" может быть не полностью инициализирована.
Было легко исправить предупреждение в моих одноэлементных классах, потому что конструктор является частным и вызывается только из одного класса.
Старый код (упрощенный):
private Singleton() {
...
addWindowFocusListener(this);
}
public static Singleton getInstance() {
...
instance = new Singleton();
...
}
Новый код (упрощенный):
private Singleton() {
...
}
public static Singleton getInstance() {
...
instance = new Singleton();
addWindowFocusListener( instance );
...
}
Это исправление не работает, если конструктор является общедоступным и может быть вызван из других классов. Как можно исправить следующий код:
public class MyClass {
...
List<MyClass> instances = new ArrayList<MyClass>();
...
public MyClass() {
...
instances.add(this);
}
}
Конечно, мне нужно исправление, которое не требует модификации всех моих кодов с использованием этого класса (например, вызывая метод init).