2

我正在创建 Car 对象,并且正在计算使用变量“carCounter”创建的汽车数量。CarCounter 从 0 开始,我想将 Car 对象命名为 car(carCounter) 并在每次创建汽车时增加计数器,以便将汽车命名为 car0、car1、car2 等...对象的创建?

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

4

4 回答 4

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();
}
于 2012-10-21T19:03:47.837 回答
1

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

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

    public YourClass() {
        name = "car" + counter;
        counter++;
    }
}
于 2012-10-21T19:02:50.443 回答
0
 public Class Car {
    public static int counter= 0;
    String name="";
    public Car() {
       counter++;
       name= "car"+ counter;
    };
}

这就是汽车类的全部内容。

于 2012-10-21T19:06:17.710 回答
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();
    }
}

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

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

于 2012-10-21T19:15:56.560 回答