为什么“类型绑定不匹配:类型?扩展T不是有效的替代类型Enum <e>”的有界参数<e extend =“” enum <e =“” >>”?

时间:2018-08-08 06:51:08

标签: java hadoop generics

我正在尝试在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();
}

1 个答案:

答案 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无法正确检查此问题。