泛型方法写入列表

时间:2015-09-03 08:42:37

标签: java generics

我正在尝试创建一个通用方法,该方法接受以下格式的数字列表。我知道我应该可以在列表中添加任何类" o"这至少是一个数字(浮点数,整数,双精度)但我也应该能够添加任何对象,因为所有类都从对象扩展。换句话说,object是任何类的超类。所以我想知道,为什么我在行o.add(p)上出错了? ?

public int checkType(List<? super Number> o) 
{
   Object p = new Object();
   //error
   o.add(p);
   return - 1;
 }

我按照Difference between <? super T> and <? extends T> in Java中对泛型的解释,这是可接受的答案。

2 个答案:

答案 0 :(得分:2)

类型参数List<? super Number> o指定可以传递任何可以容纳List的{​​{1}}。

可能是Number,但也可能是List<Object>

因此,编译器将允许您仅向其添加List<Number>(或子类型)对象。

要测试,请使用以下参数调用方法。

Number

因此,正如您所看到的那样checkType(new ArrayList<Object>()); // Works fine (and it can hold Object type). checkType(new ArrayList<Number>()); // Works fine (But it can NOT hold Object type). 意味着您正在尝试将List<? super Number>添加到列表中(PECS规则)。

答案 1 :(得分:0)

一个考虑因素?

List<Object> myObjectList = Arrays.asList(1, 2, new SuperObject(), 4, 5);

Java标配了实用程序类Arrays