2

public class SuperType {
}

public class TestClass<T extends SuperType > {

    public void doSomething() {
        List<T> list = new ArrayList<T>();
        list.add(new SuperType ()); // ERROR
    }
}

それはコンパイルされません、私に与えます

型 List のメソッド add(T) は、引数 (SuperType) には適用されません。

しかし、なぜ?

4

4 に答える 4

7

あなたが持っていると仮定します

public class SuperType {
}

public class SubType extends SuperType {
}

TestClass<SubType>あなたのコードを使用すると

public class TestClass<SubType> {

    public void doSomething() {
        List<SubType> list = new ArrayList<SubType>();
        list.add(new SuperType ());
    }
}

new SuperType()aは十分に具体的ではないため、エラーが発生する必要があります。少なくともSubType.

于 2013-07-31T10:27:00.583 に答える
4

あなたは次のような何かを持っているはずです-

メソッド呼び出し変換で SuperType を T に変換できない

つまり、実装で型宣言を使用することは無効です。

あなたが言う時-

T extends SuperType

実際には、パラメーターが SuperType または SuperType の任意のサブタイプである可能性があると言っています。

する必要があります-

List<SuperType> list = new ArrayList<SuperType>();
于 2013-07-31T10:14:45.490 に答える
0

Type は、可能なすべての型を表現するためにのみ使用されます。この場合、SuperType および Supertype 自体のサブクラスである任意の型にすることができます。

ありがとう

于 2013-07-31T10:14:20.487 に答える