首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动生成id

自动生成id
EN

Stack Overflow用户
提问于 2012-09-09 10:18:39
回答 3查看 10.3K关注 0票数 2

谁知道如何从1开始生成id,这样下一个对象就会有2,依此类推?

我尝试了以下方法,但不起作用:

代码语言:javascript
复制
class students{

    private int id;
    private String name;

    public student(String name){
        this.id=id++;
        this.name
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-09 10:22:19

您需要一个静态类成员来跟踪上次使用的索引。确保还实现了一个复制构造函数:

代码语言:javascript
复制
class students
{
    private static int next_id = 0;   // <-- static, class-wide counter

    private int id;                   // <-- per-object ID

    private String name;

    public students(String name)
    {
        this.id = ++students.next_id;
        this.name = name;

        // ...
    }

    public students(students rhs)
    {
        this.id = ++students.next_id;
        this.name = rhs.name;

        // ...
    }

    public static void reset_counter(int n)  // use with care!
    {
        students.next_id = n;
    }

    // ...
}

更新:正如@若丹怀特建议的那样,你可能想让静态计数器成为原子的,这意味着同时使用它将是安全的(即同时在多个线程中使用)。为此,请将类型更改为:

代码语言:javascript
复制
private static AtomicInteger next_id = new AtomicInteger(0);

递增和读取操作和重置操作变为:

代码语言:javascript
复制
this.id = students.next_id.incrementAndGet();  // like "++next_id"

students.next_id.set(n);                       // like "next_id = n"
票数 4
EN

Stack Overflow用户

发布于 2012-09-09 11:22:24

请注意,在非常有限的情况下,使用静态变量来跟踪计数器的工作。

您不能在多台机器上运行此代码,例如,如果是web应用程序,则运行web集群。此外,静态变量是暂时的,在您重新启动应用程序时将重置。

生成顺序id的常见解决方案是使用数据库。大多数数据库都有一种内置的方法来实现这一点。例如,SQL Server中的IDENTITY或MySQL中的AUTO_INCREMENT

考虑使用Hibernate这样的持久性框架,您可以声明许多成熟的策略中的一种,比如identity, hilo or uuid,其中一些是顺序的,一些不是,一些是由应用程序生成的,另一些是由数据库生成的,但是权衡有很好的文档记录,您将知道自己将陷入什么境地。

票数 4
EN

Stack Overflow用户

发布于 2012-09-09 10:34:28

你应该把private int id;改成private static int id;,把id++改成++id

您可以尝试:

代码语言:javascript
复制
class Students{
    private static int id;
    private String name;
    public Students(String name){
    this.id=++id; // this.id +=1;may be better 
    System.out.println(this.id);
    this.name = name;
   }
}

TestCode:

代码语言:javascript
复制
public class Test {
public static void main(String[] args) {
    Students s1 = new Students("Mark1");
    Students s2 = new Students("Mark2");
}

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12336030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档