我不明白为什么这段代码可以编译通过:
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);
可以正常工作的原因相同。 - tobias_kCollection<Enum>
而非Collection<? extends Enum>
? - BrajIterator<Enum>
表示你知道enumCollection
是Enum
类型,但是Collection<? extends Enum> enumCollection
表明enumCollection
也可以是Enum
的子类型。 - Number945