1

假设我们只有一个简单的对象 Person ,它具有 int ID 来标识它。如何在该类 Person 的构造函数中为 Person 的每个新实例提供新的 ID 值 (+1)?(我没有为此使用数据库)

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-s(递增 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 回答