在创建对象期间将变量的值添加到对象的名称

时间:2012-10-21 19:02:08

标签: java

我正在创建Car对象,并且我会计算使用变量'carCounter'创建的汽车数量。 CarCounter从0开始,我想命名Car objects car(carCounter)并在每次创建汽车时增加计数器,这样汽车就被命名为car0,car1,car2等......我怎么能这样做呢?对象的创建?

像Car()car(+ carCounter +)= new Car(); ?

4 个答案:

答案 0 :(得分:2)

我认为你想要的是一个Array

Car[] cars = new Car[3];
cars[0] = new Car();
cars[1] = new Car();
cars[2] = new Car();

这也允许你通过变量引用索引(你称之为计数):

int n = 1;
Car carAtIndexN = cars[n];

如果您要初始化整套汽车,最好这样做:

int totalCarCount = 10;

Car[] cars = new Car[totalCarCount];

for (int i=0; i<totalCarCount; i++) {
  cars[i] = new Car();
}

答案 1 :(得分:1)

您可以维护static counter变量,每次创建class的实例时,请增加该变量,并为该实例设置该变量。

public class YourClass {
    private static counter = 0;
    private String name;

    public YourClass() {
        name = "car" + counter;
        counter++;
    }
}

答案 2 :(得分:0)

 public Class Car {
    public static int counter= 0;
    String name="";
    public Car() {
       counter++;
       name= "car"+ counter;
    };
}

这一切都适用于Car class。

答案 3 :(得分:0)

为了保持线程安全,我建议为任务使用static AtomicLong变量,该变量将作为构造函数中的最后一个命令递增。这样,如果构造函数中有Exception,则计数器将保持不变。

public final class Car {
    private static AtomicLong carCounter = new AtomicLong();
    public Car() {
        //do the dirty things here
        carCounter.incrementAndGet();
    }  
    public static long getCounterValue() {
        return carCounter.get();
    }
}

我也会创建类final,因为如果一个类扩展了这个类,它的构造函数可以在保存计数器后执行操作,这会使事情处于不一致状态(计数器不会反映创建的实例的数量)...

有了这么多的限制,这不是一个非常有用的情况,不是吗?我认为最好的解决方案是使用abstract factory来创建实例,并跟踪计数器。也许抽象工厂甚至应该是Singleton ......