0

私の実際のセットアップは少し複雑なので、より一般的な例を作成します。次のクラスを検討してください (Java 構文を使用)。

class Set
{
...
    Set subSet(Element[] elementList)
    {
    ...
    }
}

class SetOfNumbers extends Set
{
...
    int operationOnSetsOfNumbers()
    {
    ...
    }
}

以下のコードが書けるようになりたいです。

Set someSet = new SetOfNumbers(...);
System.out.println(someSet.subset(...).operationOnSetsOfNumbers());

もちろん、 operationOnSetsOfNumbers() は Set のメンバーではないため、これはコンパイルされません。1 つの解決策は、子クラスごとに個別に subSet メソッドを実装し、毎回適切な戻り値の型を与えることですが、subSet の実装が複雑で子が多数ある場合、これは明らかに洗練されていません。Set のメンバー関数内で Set の任意の子を参照する方法が欲しいのですが、これを行う方法が思いつきません。何か案は?

4

1 に答える 1

0

ジェネリックは次のように利用できます。

class Set<T extends Set<T>>
{
    ...
    T subSet(Element[] elementList)
    {
        ...
    }
}

class SetOfNumbers extends Set<SetOfNumbers>
{
    ...
    int operationOnSetsOfNumbers()
    {
        ...
    }
}

subSet()そのため、インスタンスでメソッドを呼び出したSetOfNumbers場合、戻り値の型はSetOfNumbersSet ではなく になります。operationOnSetsOfNumbersしたがって、 subSet() を呼び出した後、引き続き呼び出すことができます。

于 2013-10-13T19:41:57.120 に答える