-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 に答える