donnadulcinea:
私は、MyClassのを拡張するオブジェクトのサブ項目が含まれているJavaクラスを持っています。
class MyClass {
List<? extends MyClass> items;
[...]
何らかの理由で、私は挿入できませんMyClassのこのリストに項目を。私はなぜ理解していない、と私は、この問題を回避できますか。例えば:
void foo(){
items = new LinkedList<MyClass>(); // This is OK
items.add(new MyClass()); // Not allowed... why?
}
コンパイラは、「言う(MyClassの型リストのメソッドAdd(キャプチャ#1-の?拡張MyClassの)引数には適用されません)」
私は実際にどのようにこの問題バイパス理解していない、そしてなぜコンパイラはnecessarely拡張型のみ受け入れるべきMyClassのを。
注:なぜ私はこのアプローチを使用する必要にしていますか?私はサブ項目のリストを持っているのMyClassの延長を許可する必要があるため。
Ashishkumarシン:
使用extends
あなたは唯一のコレクションから取得することができます。あなたはそこに置くことができません。あなたは、使用していることを行うことができますsuper
。
だから、あなたのケースでは、あなたが使用している場合- List<? super MyClass> items;
あなたは任意のコンパイル/実行時エラーを取得することはできません。
スーパーは、getとプットの両方にできますが、取得時の戻り値の型があります? super T
。