我正在尝试在Eclipse中阅读hadoop 1.0.0源代码。我先下载了源代码,然后使用ant eclipse
来构建项目。之后,我在Eclipse中成功创建了项目。但是Type Bound mismatch: The type ? extends T is not a valid substitute for the bounded parameter <E extends Enum<E>> of the type Enum<E>
的第396行出现错误Gridmix.java
。错误代码:
private <T> String getEnumValues(Enum<? extends T>[] e) {
StringBuilder sb = new StringBuilder();
String sep = "";
for (Enum<? extends T> v : e) {
sb.append(sep);
sb.append(v.name());
sep = "|";
}
return sb.toString();
}
答案 0 :(得分:0)
枚举本身是通用的(在纯Java中),对参数T
具有限制,因此:
`Enum<T extends <Enum<T>>`
您对代码中的T没有任何限制,因此编译器会抱怨,因为您可能以T = Object
结尾,但是Enum
不能接受Object
作为{{1} }。
因此,您还必须在代码中限制T
:
T
实际上,在这种情况下,通配符没有意义,因为您不能扩展private <T extends Enum<T>> String getEnumValues(Enum<? extends T>[] e) {
StringBuilder sb = new StringBuilder();
String sep = "";
for (Enum<? extends T> v : e) {
sb.append(sep);
sb.append(v.name());
sep = "|";
}
return sb.toString();
}
(因为您不能扩展任何特定的T
)。但这应该已经编译。如果没有,请删除通配符。
我知道,这不是您的代码。因此,可能是一些较旧的Java无法正确检查此问题。