1

それを識別するintIDを持つ単純なオブジェクトPersonがあるとしましょう。Personの新しいインスタンスごとに、そのクラスPersonのコンストラクターで新しいID値(+1)を指定するにはどうすればよいですか?(私はこれにDBを使用しません)

4

5 に答える 5

9

静的を使用しますAtomicInteger

final class Foo {
  private static final AtomicInteger seed = new AtomicInteger();
  private final int id;

  public Foo() {
    this.id = seed.incrementAndGet();
  }
}

詳細については、こちらをご覧ください:https ://stackoverflow.com/a/4818753/17713

于 2012-05-08T13:11:26.557 に答える
1

静的変数を使用します。静的変数は、クラスに直接バインドされるのではなく、クラスインスタンスにバインドされます。

例(C#):

public class Person{
    public static int Increment = 1;

    public int ID;
    public Person(){
        this.ID = Increment;
        Increment++;
    }
}

このようにして、すべてのクラスインスタンスは一意のID(1ずつ増加)を持ちます。

編集:このアプローチはスレッドセーフではありません。@Muduの回答を参照してください。

于 2012-05-08T13:11:22.117 に答える
1

あなたは次のようなものを使うべきです

public class YourClass {
    private static int generalIdCount = 0;
    private int id;

    public YourClass() {
        this.id = generalIdCount;
        generalIdCount++;
    }
}
于 2012-05-08T13:12:27.807 に答える
1

のすべてのインスタンスで共有される静的カウントフィールドを使用しますPerson

class Person {
    private static int nextId = 1;
    private final int id;

    Person() {
        id = nextId++;
    }
}
于 2012-05-08T13:12:52.750 に答える
1

現在のカウンター値の静的変数を作成し、作成時にIDに割り当てることができます...

public class Person {

    // same across all instances of this class
    static int currentCounter = 0;

    // only for this instance
    int personId;

    public Person(){
        personId = currentCounter;
        currentCounter++;
    }
}
于 2012-05-08T13:13:11.100 に答える