我想避免(大部分)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方法)。
不相關的問題直接,但爲什麼'MyClass'有其自身的'List'。即使這種關係在許多情況下是合理的,爲什麼它會將它自己添加到'List'中。想象一下內存中產生的數據結構。 – CKing 2015-05-04 04:06:48
@CKing,我的猜測是OP在實例中鍵入實例變量時忽略了'static'。 – ryvantage 2015-08-23 19:19:01
使用靜態創建方法。 – 2015-10-19 15:40:20