0

オブジェクトをコレクションに追加できないのはなぜですか? クラスBはAを拡張したものなので.

import java.util.*;

public class TestGeneric
{
  public static void main(String[] args)
  {
    Collection<? extends A> collection = new ArrayList<A>();
    A a = new B();
    collection.add(a);
  }

  private static class B implements A {
    public int getValue() { return 0; }
  }
}

interface A { int getValue(); }
4

4 に答える 4

4

以下の理由によります。

Collection<? extends A> coll = new ArrayList<C>(); // C extends A

coll.add(new B()); // B extends A, but doesn't extend C. Oops.

ただし、コンパイラは、coll には A を拡張する要素しかないことを認識しているため、それらを As として取得することもできます。

A myA = coll.get();  // No problem, it might be B or C, but they both extend A
于 2013-09-24T12:12:53.967 に答える
3

短く簡単な説明:

<? extends A>意味:を拡張する特定の未知Aの型。それA自体またはそのサブタイプのいずれかです。したがって、このコレクションに要素を挿入することはできませんadd(object)コンパイラは、メソッドのパラメーターに有効な型を知ることができません。

于 2013-09-24T12:51:31.773 に答える