我正在尝试创建一个通用方法,该方法接受以下格式的数字列表。我知道我应该可以在列表中添加任何类" 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中对泛型的解释,这是可接受的答案。
答案 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
。