這裏是我的樣品抽象單例類:如何在Java中實現抽象單例類?
public abstract class A {
protected static A instance;
public static A getInstance() {
return instance;
}
//...rest of my abstract methods...
}
這裏是具體的實現:
public class B extends A {
private B() { }
static {
instance = new B();
}
//...implementations of my abstract methods...
}
可惜我不能獲得B類執行靜態代碼,所以實例變量永遠不會被設置。我曾經嘗試這樣做:
Class c = B.class;
A.getInstance() - returns null;
這
ClassLoader.getSystemClassLoader().loadClass("B");
A.getInstance() - return null;
運行這兩個在Eclipse調試器中的靜態代碼永遠不會被執行。我能找到的執行靜態代碼的唯一方法是將B構造函數的可訪問性更改爲public,然後調用它。
我在Ubuntu 32bit上使用sun-java6-jre來運行這些測試。
Singleton中的私有構造函數的目的是爲了防止其他人實例化它。我已經在這裏實現了 - 你不能實例化一個抽象類,並且子類有一個私有構造函數。 – Simon 2010-03-17 00:08:07
它不會強制子類僅爲抽象類型,只有私有構造函數。 – BalusC 2010-03-17 00:13:15
Singleton不需要_require_一個私有構造函數(請參閱我的答案,以便用公共構造函數解決此問題)。 – ryvantage 2015-09-13 18:26:42