这是我的示例抽象单例类:

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 32位上使用sun-java6-jre运行这些测试。

最佳答案

抽象单例?对我来说听起来不可行。 Singleton模式需要private构造函数,这已经使子类化成为不可能。您需要重新考虑您的设计。 Abstract Factory pattern可能更适合于特定目的。

关于java - 如何在Java中实现抽象单例类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2459061/

10-10 10:07