Утечка в предупреждении конструктора

Я бы хотел избежать (большинства) предупреждений 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);
  }

}

Конечно, мне нужно исправление, которое не требует изменения всех моих кодов с использованием этого класса (например, путем вызова метода инициализации).

78
задан Gray 1 January 2017 в 21:32
поделиться