-2

我有一堂课,例如:

public class A{
    private final int number;

    public A(int number){
         this.number = number;
    }
}

问题是,我想number一次次更新,我必须让一个对象无状态,这意味着nubmer必须是最终的。我的朋友建议我使用AtomicInteger类,但我不知道如何使它工作。

4

2 回答 2

1

拥有 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);
    }
}
于 2016-02-29T01:09:02.620 回答
0

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;
  }
}

对于无状态对象,我认为您误解了它的含义。

于 2016-02-29T00:52:36.217 回答