20

以下のクラスがあるとします:

class Parent
{
    private int ID;
    private static int curID = 0;

    Parent()
    {
         ID = curID;
         curID++;
    }
}

およびこれらの 2 つのサブクラス:

class Sub1 extends Parent
{
    //...
}

class Sub2 extends Parent
{
    //...
}

私の問題は、これらの 2 つのサブクラスが、異なるメンバーを持つのではなく、親クラスの同じ静的 curID メンバーを共有していることです。

だから私はこれを行う場合:

{
    Sub1 r1 = new Sub1(), r2 = new Sub1(), r3 = new Sub1();
    Sub2 t1 = new Sub2(), t2 = new Sub2(), t3 = new Sub2();
}

r1、r2、r3 の ID は 0、1、2 になり、t1、t2、t3 の ID は 3、4、5 になります。これらの代わりに、t1、t2、t3 の値を 0、1、2 にします。つまり、curID 静的変数の別のコピーを使用します。

これは可能ですか?そしてどうやって?

4

9 に答える 9

2

可能ですが、単一のカウンターを使用することはできません。サブタイプごとにカウンターが必要です。たとえば、次のようなものです。

private static Map<Class<?>, Integer> counters = new HashMap<>();

Parent() {
     Integer curID = counters.get(this.getClass());
     if (curID == null) {
         curID = 0;
     }
     ID = curID;
     curID++;
     counters.put(this.getClass(), curID);
}

注意: 上記はスレッドセーフではありません。しかし、あなたの最初のコードはどちらでもありません...

于 2013-06-18T14:59:16.183 に答える
1

他の回答とは異なり、「静的継承」は関係ありませんが、問題の解決策があります。クラスごとの ID ジェネレーターが必要です。

良い例を次に示します。

Java:サブクラスの静的変数にアクセスする親メソッド?

于 2013-06-18T14:59:07.923 に答える