Java中的自动更新ID

时间:2013-03-17 10:23:27

标签: java auto-generate

这是我的学校作业。我需要一个库存系统,当用户键入新产品时,该系统会自动更新产品ID。我创建了一个名为Product的对象数组,其中包含4个属性(名称,ID,价格,数量)。 ID不应该需要用户输入。

这部分位于input()方法中,该方法与Object不同。我没有将ID传递给对象类,就像我对其他三个属性一样。

            x[i] = new Product(name,price,stock);
            id = x[i].setID();   

对象类的一部分:

/**
 * Constructor
 */
public Product(){
    id = 0; name = ""; price = 0.00; quantity = 0;
}

public Product( String n, double p, int q){
    setName(n); setPrice(p); setQuantity(q);
}

public void setID(){
    this.id = id++;
}

谢谢。

2 个答案:

答案 0 :(得分:1)

你所拥有的东西是行不通的,因为id是一个实例变量。这意味着您创建的每个产品的ID都为0.在您创建的每个产品上调用setID()都会将avery产品的ID设置为1.

你需要一个static计数器,它属于该类,而不是它的每个实例:

public class Product {
    private static int nextId = 0;

    ...

    public Product(String name, double price, int quantity) {
        this.id = Product.nextId;
        Product.nextId++;
        this.name = name; 
        this.price = price; 
        this.quantity = quantity;
    }
}

请注意,这在多线程环境中效果不佳,而且双倍是价格的不错选择,但您稍后会了解到。

有关实例和静态变量的更多信息,请参阅the Java tutorial

答案 1 :(得分:0)

您是否在寻找为每个Product对象生成唯一ID的方法?如果是这样,您现在编码它的方式不起作用,因为每个Product都有自己的id,它完全独立于所有其他Product对象。有几种方法可以解决这个问题: -

  1. 查看Java中的静态变量含义
  2. 在代码中维护一个变量,每次创建Product对象时该变量都会增加。将此变量传递给Product的构造函数。