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++;
}
}
スレッド セーフを維持する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
クラスがこれを拡張する場合、そのコンストラクターはカウンターが保存された後に操作を実行でき、それにより物事が矛盾した状態のままになるため、クラスも作成します (カウンターは作成されたインスタンスの数を反映しません)。 ..
これだけの制約があると、これはあまり便利な状況ではありませんね。最善の解決策は、抽象ファクトリを使用してインスタンスを作成し、カウンターを追跡することだと思います。たぶん、その抽象ファクトリはシングルトンでさえあるはずです...
public Class Car {
public static int counter= 0;
String name="";
public Car() {
counter++;
name= "car"+ counter;
};
}
Car クラスは以上です。