我有一个我一生都无法理解的问题。为什么我在这里得到一个空指针?
原则上我有三个班级。一个单例类,一个工厂类和一个主类。在 Main 中,我调用了 Singleton 类一次,让我输出一些东西。
然后我在工厂上调用一个静态方法。在这个工厂类中有一个静态块,它依次访问单例类。然而,此时单例类的实例为空。
我真的不明白这一点,因为使用调试器我也看到变量为空,但调用流程实际上是预期的。
主程序
package testing;
public class Main {
public static void main(String[] args) {
Singleton.getInstance().getValue();
Factory.build();
}
}
Run Code Online (Sandbox Code Playgroud)
单例.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;
}
}
Run Code Online (Sandbox Code Playgroud)
工厂.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");
}
}
Run Code Online (Sandbox Code Playgroud)
问题是您Factory.build();在Singleton构造函数内部调用。执行顺序可能有问题。
特别是:Factory.build();在分配 toINSTANCE发生之前调用。
| 归档时间: |
|
| 查看次数: |
284 次 |
| 最近记录: |