3

私は次のクラス構造を持っています:

public abstract class Generic<T extends SuperClass>

public class SuperGeneric<T extends SuperClass & SomeInterface> 
    extends Generic<T>

SuperGeneric次に、可能なすべてのクラスをカバーするインスタンスを作成します。私はこのようにそれを試しました:

Generic<? extends SuperClass & SomeInterface> myGeneric 
    = new SuperGeneric<? extends SuperClass & SomeInterface>();

今、これはうまくいかないようです。そのGeneric上で次のエラーが発生します:Incorrect number of arguments for type Generic<T>; it cannot be parameterized with arguments <? extends SuperClass, SomeInterface>

そして、new SuperGeneric私は同様のエラーを受け取ります:Incorrect number of arguments for type SuperGeneric<T>; it cannot be parameterized with arguments <? extends SuperClass, SomeInterface>

このインスタンスを正しく作成する方法はありますSuperGenericか?

条件を満たす2つの異なるクラスがありextends SuperClass & SomeInterfaceますが、それらを1つのタイプで一般化することはできません。

4

2 に答える 2

2

ジェネリッククラスをインスタンス化する場合は、具象型を指定する必要があります。制約を満たすクラスが2つあるとおっしゃいました。Type1これらはとと言いますType2

次に、次のことができるようになります。

Generic<Type1> myGeneric1 = new SuperGeneric<Type1>();

Generic<Type2> myGeneric2 = new SuperGeneric<Type2>();

ワイルドカードは宣言にのみ使用されます。つまり、ここに任意のタイプを配置できます(指定された制約を満たす)

于 2012-05-23T12:22:49.583 に答える
2

インスタンス化するときは、コンパイラが入力するタイプを指定する必要があります。

于 2012-05-23T12:20:14.750 に答える