我正在创建 Car 对象,并且正在计算使用变量“carCounter”创建的汽车数量。CarCounter 从 0 开始,我想将 Car 对象命名为 car(carCounter) 并在每次创建汽车时增加计数器,以便将汽车命名为 car0、car1、car2 等...对象的创建?
像 Car() car(+carCounter+) = new Car(); ?
我正在创建 Car 对象,并且正在计算使用变量“carCounter”创建的汽车数量。CarCounter 从 0 开始,我想将 Car 对象命名为 car(carCounter) 并在每次创建汽车时增加计数器,以便将汽车命名为 car0、car1、car2 等...对象的创建?
像 Car() car(+carCounter+) = new Car(); ?
我认为你想要的是一个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();
}
您可以维护一个static counter
变量,并且每次创建 的实例时class
,增加该变量并为该实例设置它。
public class YourClass {
private static counter = 0;
private String name;
public YourClass() {
name = "car" + counter;
counter++;
}
}
public Class Car {
public static int counter= 0;
String name="";
public Car() {
counter++;
name= "car"+ counter;
};
}
这就是汽车类的全部内容。
为了维护线程安全,我建议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
,因为如果一个类扩展了这个类,它的构造函数可以在保存计数器后执行操作,这会使事情处于不一致的状态(计数器不会反映创建的实例的数量)。 ..
有这么多限制,这不是一个非常有用的情况,不是吗?我认为最好的解决方案是使用抽象工厂来创建实例,并跟踪计数器。也许那个抽象工厂甚至应该是一个单例......