代码:
List<? extends Integer> ints= new ArrayList<Integer>();
ints.add(new SomeType());
我试图解释为什么我们不能ints
正式添加。请检查正确性。
编译器总是将问号匹配到匿名类型CAP#n
,其中n
是源代码中通配符声明的序号。从这个带有extends的通配符意味着编译器在内部分配CAP#1
(在这种情况下)只分配给匿名类型的null
. 但我不确定这个原因。考虑
List<? super Integer> ints= new ArrayList<Integer>();
ints.add(new Object());//error
在这种情况下,我们让编译器在内部创建一个新的匿名类型,标记为,以便所有超类型的CAP#2
唯一实例是“实例的” 。Integer's
CAP#2
问题我现在了解通配符的工作原理正确吗?