我想避免 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 方法)。