我正在创建Car对象,并且我会计算使用变量'carCounter'创建的汽车数量。 CarCounter从0开始,我想命名Car objects car(carCounter)并在每次创建汽车时增加计数器,这样汽车就被命名为car0,car1,car2等......我怎么能这样做呢?对象的创建?
像Car()car(+ carCounter +)= new Car(); ?
答案 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 ......