すべての新しいクラスのために割り当てる固有のID(インスタンスではなく!)

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
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=292982&siteId=1