中的有界通配符List<? super Number>
可以捕获Number及其任何超类型。由于Number extends Object implements Serializable
,这意味着当前唯一可被捕获转换的类型List<? super Number>
是:
请注意,你可以add(Integer.valueOf(0))
使用上述任何一种。但是,你不能 add(new Object())
使用List<Number>
或List<Serializable>
,因为这违反了通用类型安全规则。
因此,它是不是真的,你可以add
任意超Number
到List<? super Number>
; 根本不是有限的通配符和捕获转换如何工作。你不声明a
是List<? super Number>
因为你可能想向其中添加一个Object(你不能!);之所以这样做,是因为你要向其中添加Number对象(即,它是的“消费者” Number),而仅仅是a List<Number>
的限制太大。