0

なぜリストの変更が許可されていないのかというジェネリック拡張の背後にある概念は何ですか? String は Object を拡張し、正当であるはずなので、 list に文字列を追加すると、なぜコンパイル時エラーがスローされるのですか?

これによりコンパイルエラーが発生した場合、作成されたリストの用途は何ですか。

         List<? extends Object>  ls=new ArrayList<String>();
         ls.add("asd");  // compilation error

そして、スーパーの場合はコンパイルします。

         List<? super Integer> ls1=new ArrayList<Object>();
         ls1.add(1);

Kathy Sierra と Javadoc を読みましたが、これが何を意味するのか理解できません。これを理解するために、例を挙げて詳細に説明してください。

4

2 に答える 2

0

コンパイラは、リストの実際のジェネリック型が何であるかを分析しようとすることを気にせず、ls宣言されたジェネリック型のみをチェックします。こちらと同じです

void add(List<? extends Object> ls) {
   ls.add("1");
   ...

lsたとえば、整数のリストにすることができます。「1」を追加することはできません。

同様の説明が当てはまるsuper

于 2013-06-05T14:18:18.303 に答える