【发布时间】:2014-12-05 10:04:08
【问题描述】:
我不明白为什么这段代码会编译:
public void test(Collection<? extends Enum> enumCollection) {
for (Enum e : enumCollection) {
}
}
而这个没有:
public void test(Collection<? extends Enum> enumCollection) {
Iterator<Enum> iterator = enumCollection.iterator();
//Required: Iterator<Java.lang.Enum>
//Found: Iterator<capture<? extends Java.lang.Enum>>
}
? extends Enum 在所有情况下都应该是Enum 的子类型,那么为什么我会收到迭代器的编译错误以及为什么它可以与 for-each 循环一起使用?
【问题讨论】:
-
可能出于同样的原因
ArrayList<Object> foo = new ArrayList<String>();不起作用,而Object bar = new ArrayList<String>().get(0);可以。 -
为什么不能使用
Collection<Enum>而不是Collection<? extends Enum> -
Iterator<Enum>表示您知道enumCollection属于Enum类型,但Collection<? extends Enum> enumCollection表明enumCollection也可以是Enum的子类型。