这里是我的样品抽象单例类:如何在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