不兼容列表<>在java中使用泛型

时间:2014-05-19 23:43:15

标签: java oop generics

我在JAVA中有以下代码:

List <? extends Number > l3=new List<Number>() ; // List not allowed ? why . and why arrayList is allowed here

Integer i=new Integer(5);

l3.add(i); // why we can not add i to l3 .

// ------------- 另一件事:

    List <?> variablex;
  variablex.add(new Integer(5) ); // error ? so why ?

我想知道为什么我在编译时遇到这些错误?

2 个答案:

答案 0 :(得分:4)

您必须具有List的具体实施,例如ArrayListLinkedList

List <? extends Number> l3 = new ArrayList<Number>() ;

每当你有一个通配符作为引用变量的泛型类型参数时,它就可以代表任何东西。在这里,对于? extends Number,它可以是Number(或Number)本身的任何子类。它可能是List<Double>。为了保持类型安全,编译器必须禁止使用add来调用Integer,因为l3可能是List<Double>,并且您不应该被允许添加Integer List Double可能是List<?>。使用List<?> l3 = new ArrayList<Number>(); // Later... l3 = new LinkedList<MySpecialTypeYouDidntKnowAbout>(); // And then this doesn't work. l3.add(new Integer(5)); ,通配符可以代表任何内容。

{{1}}

答案 1 :(得分:1)

List在接口中,您无法实例化接口。

ArrayListList接口的实现,您只能创建类的对象。