我试图在下面的列表中添加一个整数对象,但在添加时遇到编译器错误,
List<? extends Number> list = new ArrayList<>();
Integer a = 2;
list.add(a); // Not allowed
我试图在下面的列表中添加一个整数对象,但在添加时遇到编译器错误,
List<? extends Number> list = new ArrayList<>();
Integer a = 2;
list.add(a); // Not allowed
实际上,这里需要使用下界通配符,而不是上界通配符.考虑:
List<? super Number> list = new ArrayList<>();
list.add(2); // add an integer
list.add(2d); // add a double
这里我们说的是列表包含Number
或Number
的任何子类型.
请注意,只允许对list
执行超类型Number
的操作.例如,试图对列表中的任何项使用Integer
方法将违反编译时类型安全性,并将在编译时生成错误.