我有一堂课,例如:
public class A{
private final int number;
public A(int number){
this.number = number;
}
}
问题是,我想number
一次次更新,我必须让一个对象无状态,这意味着nubmer
必须是最终的。我的朋友建议我使用AtomicInteger
类,但我不知道如何使它工作。
我有一堂课,例如:
public class A{
private final int number;
public A(int number){
this.number = number;
}
}
问题是,我想number
一次次更新,我必须让一个对象无状态,这意味着nubmer
必须是最终的。我的朋友建议我使用AtomicInteger
类,但我不知道如何使它工作。
拥有 AtomicInteger 不会使类无状态。更新整数,无论是否是原子的,都会改变实例的内部状态。
您可以使类不可变,即状态不能更改,并为每个状态更改创建一个新实例。例子:
public class A {
private final int number;
public A(int n) {
number = n;
}
public int getNumber() {
return number;
}
public A setNumber(int n) {
return new A(n);
}
}
AtomicInteger 是线程安全的,你应该像这样使用它:
public class Atomic{
private AtomicInteger number;
public Atomic(int number){
this.number = new AtomicInteger(number);
}
public int getNumber() {
return number.get();
}
public void setNumber(int number) {
this.number.set(number);;
}
}
但是,如果您想制作最终的东西,则不应使用 AtomicInteger,并且必须在编译时知道最终结果,因此您的解决方案是封装,就像您所做的那样:
public final class Atomic{
private int number;
public Atomic(int number){
this.number = number;
}
public int getNumber() {
return this.number;
}
}
对于无状态对象,我认为您误解了它的含义。