gpt4 book ai didi

java - 单例类中成员变量的单个副本

转载 作者:行者123 更新时间:2023-12-01 20:16:50 28 4
gpt4 key购买 nike

我试图在这里练习 Singleton 类。

public class StaticClass {

public static StaticClass staticObject = new StaticClass();

private int counter;

private StaticClass() {

}

public static StaticClass getMyObject() {
return staticObject;
}

public Integer showCounter() {
return ++counter;
}
}

public class TestSingleton {

public static void main(String[] args) {

new TestSingleton().testImplementation();
}

public void testImplementation() {
StaticClass obj1 = StaticClass.getMyObject();

Integer obj1Int = obj1.showCounter();

StaticClass obj2 = StaticClass.getMyObject();

Integer obj2Int = obj2.showCounter();

StaticClass obj3 = StaticClass.getMyObject();

Integer obj3Int = obj3.showCounter();

System.out.println(obj1Int+","+obj2Int+","+obj3Int);
}
}

但是我对在这里维护计数器变量的单个副本有点困惑。

运行程序后,我得到不同的计数器值:1,2,3

对于为什么有多个值有什么建议吗?

最佳答案

每次调用它时都会得到不同的数字,因为 showCounter() 方法具有在调用它时增加计数器的副作用。

public Integer showCounter() {  
return ++counter;
^^----------- This adds 1 to the counter.
}

在名为 show 的方法上产生这样的副作用确实有点令人困惑。我将其分为两种方法:

public int getCounter() {
return counter;
}

public int incrementCounter() {
return ++counter;
}

此外,请查看 JDK 中的 AtomicInteger。如果您需要的只是一个线程安全且原子的计数器,那么它会为您完成所有这一切。

关于java - 单例类中成员变量的单个副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45616422/

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