Я бы хотел избежать (большинства) предупреждений Netbeans 6.9.1, и у меня проблема с 'Утечка этого в конструктор '
предупреждение.
Я понимаю проблему, вызывая метод в конструкторе и передавая « 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);
}
}
Конечно, мне нужно исправление, которое не требует изменения всех моих кодов с использованием этого класса (например, путем вызова метода инициализации).