首页 > 解决方案 > 具有单例和工厂模式的空指针

问题描述

我有一个我一生都无法理解的问题。为什么我在这里得到一个空指针?

原则上我有三个班级。一个单例类,一个工厂类和一个主类。在 Main 我调用 Singleton 类一次,让我输出一些东西。

然后我在工厂调用一个静态方法。在这个工厂类中有一个静态块,它依次访问单例类。然而,此时单例类的实例为空。

我不太明白这一点,因为使用调试器我还看到变量为空,但调用的流程实际上与预期的一样。

主.java

package testing;

public class Main {

    public static void main(String[] args) {
        Singleton.getInstance().getValue();

        Factory.build();
    }
}

单例.java

package testing;

public class Singleton {

    private static final Singleton INSTANCE = new Singleton();

    private String value;

    public static Singleton getInstance() {
        return INSTANCE;
    }

    private Singleton() {
        configureSingleton();

        Factory.build();
    }

    private void configureSingleton() {
        value = "TEST";
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}

工厂.java

package testing;

public class Factory {

    static {
        Singleton instance = Singleton.getInstance();

        System.out.println(instance.getValue());
    }

    private Factory() {

    }

    public static void build() {
        System.out.println("Building now");
    }
}

标签: java

解决方案


问题是您在构造函数Factory.build();内部调用。Singleton执行顺序可能有问题。

特别是:Factory.build();在分配INSTANCE发生之前调用。


推荐阅读