DraxCode:
私はすべての新しいクラス(インスタンスではなく!)のためのユニークなIDを割り当てることが可能であるかどうか、疑問に思いました。
私が何を意味するかの例:
public class ChildObjectOne extends SuperClass {}
public class ChildObjectTwo extends SuperClass {}
public SuperClass {
private final int ID;
public SuperClass() {
this.ID = newID();
}
}
final ChildObjectOne childObjectOne = new ChildObjectOne();
final ChildObjectTwo childObjectTwo = new ChildObjectTwo();
System.out.println(childObjectOne.getID()); //prints 1
System.out.println(childObjectOne.getID()); //prints 2
childObjectOne = new ChildObjectOne();
childObjectTwo = new ChildObjectTwo();
System.out.println(childObjectOne.getID()); //prints 3
System.out.println(childObjectOne.getID()); //prints 4
私はそれがやりたいことは代わりに再びプリント1及び2です。これは、すべての新しいクラスのための新しいIDを生成する必要がありますが、私は、そのクラスの新しいインスタンスを作成した場合、私はIDが同じに滞在したいです。
私は、この使用してジェネリックを達成しようとしました。
public SuperClass<T> {
private static int ID;
public SuperClass() {
this.ID = newID();
}
}
public class ChildObjectOne extends SuperClass<ChildObjectOne> {}
public class ChildObjectTwo extends SuperClass<ChildObjectTwo> {}
私はそれが新しいクラスとして異なるTを渡す数えるでしょう、期待していたが、それは動作しませんでした。代わりにIDが設定された最後のものです。
どのように私はIDのこの種のシステムを実現することができますか?
前もって感謝します!
HomeIsWhereThePcIs:
私のコメント時に展開するには、クラス名はあなたのユニークな文字列IDを提供します。あなたはそのID番号になりたい場合は、このような何かを行うことができます:
class IdGenerator{
private static int counter = 0;
private static HashMap<String,Integer> classIdMap = new HashMap<>();
public static synchronized int getId(Class clazz){
if (classIdMap.containsKey(clazz.getName())) {
return classIdMap.get(clazz.getName());
} else {
classIdMap.put(clazz.getName(), ++counter);
return counter;
}
}
}
そして、あなたのクラスから、あなたはどうなります:
IdGenerator.getId(this.getClass());
生成されたIDは同じではないかもしれません、それが構成されている方法に応じて、アプリを起動するたびに。例えば:
Scanner in = new Scanner(System.in);
if (in.nextInt() < 100) {
System.out.println("a = " + new Aclass().id); // a = 1
System.out.println("b = " + new Bclass().id); // b = 2
} else {
System.out.println("b = " + new Bclass().id); // b = 1
System.out.println("a = " + new Aclass().id); // a = 2
}