gpt4 book ai didi

Java Singleton.getInstance() 返回空值?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:14:02 25 4
gpt4 key购买 nike

我尝试使用这个单例,但 getInstance 显然可以返回 null:

class Singleton {
public static final String K_LEVEL = "level";
static Singleton instance = new Singleton();
private int level;

static Singleton getInstance() {
return instance;
}

int getLevel() {
return level;
}

void incrementLevel() {
System.out.println("LEVEL INCREASED TO " + ++level);
}

void addToLevel(int x) {
for(int i=0;i<x;i++)
incrementLevel();
}

}

class A {
public static void main(String[] args) {
Singleton s = Singleton.getInstance();
Integer i = Integer.getInteger(Singleton.K_LEVEL);
s.addToLevel(i);
}
}

我听说在 Java 中实现单例非常困难并且容易出现竞争条件。我的单例模式实现错误了吗?我最近将代码更改为如下所示,现在 getInstance 有时会返回 null。为什么?

$ java A -Dlevel=1
Exception in thread "main" java.lang.NullPointerException
at A.main(A.java:29)

最佳答案

你的单例没有问题。没有并发问题,因为这不是多线程代码。

您认为 s 为空,但实际上 i 为空。

由于 addToLevelint 作为参数,Integer i 被自动拆箱(从 Integer 隐式转换为 int),但由于 inull,因此引发了 NullPointerException。当被转换的值为 null 时,自动拆箱会抛出 NullPointerException

Integer.getInteger(Singleton.K_LEVEL) 返回 null 的原因是因为您执行了 java A -Dlevel=1 而不是 java -Dlevel=1 A。后者是正确的语法。

关于Java Singleton.getInstance() 返回空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15647838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com