どのように私は `一覧<に` MyClass`を追加できますか?MyClassのは、 `>拡張します

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

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=183711&siteId=1