2

私は次のコードを持っています:

public <T extends SomeObject> long doSomething(T someObject){
    List<? extends SomeObject> l = new LinkedList<>();
    l.add(someObject);
}

これにより、コンパイルエラーが発生します-適切なメソッドが見つからないことを通知します:add(T)、それはなぜですか?

l拡張するものを受け入れる場合、それは拡張する境界としてSomeObject受け入れるべきではありませんか?someObjectSomeObject

4

2 に答える 2

12
List<? extends SomeObject> l

それはどういう意味ですか?もちろん、エラーが発生します。

この例を見てください:SomeObjectFruit、2つの派生クラスがAppleあり、Orange

あなたのリストには何が含まれますか?ApplesまたはOranges?コンパイラはわかりません。したがって、エラーが発生します。

List<? extends SomeObject> lに置き換える場合 List<SomeObject> lAppleOrangeは両方であるため、これは機能しFruitます。

于 2012-07-22T12:49:16.877 に答える