[英](Error: valueOf(Class<T>, String) of type Enum<E> but does not hide it) Upgrade version from jdk1.6 to jdk1.7
当我在eclipse中将java版本从jdk1.6升级到jdk1.7时,以下错误已经开始仅在编译模式下抛出。
错误是:
名称冲突:类型为TestEnum的方法valueOf(Class,String)与Enum类型的valueOf(Class,String)具有相同的擦除,但不隐藏它
public enum TestEnum {
ABC;
public static TestEnum valueOf(Class<TestEnum> enumType, String value){//This error throw at this line.
return null;
};
}
当我将编译级别从1.7更改为1.6时,错误已经消失。 我不明白为什么这不适用于编译级别1.7? 编译级别1.7是否需要进行其他更改?
编辑:
它返回具有指定名称的指定枚举类型的枚举常量。 该名称必须与用于在此类型中声明枚举常量的标识符完全匹配。 但我没有这种情况,名称是不同的。有100个以上枚举类具有相同的实现。 我不容易改变这种产品范围的变化。
public enum TestEnum {
ABC;
public String toString() {
switch (this) {
case ABC:
return "Abc";
}
return "";
}
/* public static TestEnum valueOf(Class<TestEnum> enumType, String value){
if(value.equalsIgnoreCase("XYZ")){
return ABC;
}
return null;
};*/
public static void main(String[] args) {
TestEnum t=TestEnum.valueOf(TestEnum.class,"Abc");
System.out.println(t);
}
}
>线程“main”中的异常java.lang.IllegalArgumentException:com.test.example.TestEnum.main中java.lang.Enum.valueOf(Enum.java:236)中没有枚举常量com.test.example.TestEnum.Abc (TestEnum.java:22)
问题是static <T extends Enum<T>> T Enum.valueOf(Class<T> enumType, String name)
与你的public static TestEnum valueOf(Class<TestEnum> enumType, String value)
,但是看起来类型擦除后相同(两者都基本上变为静态Object valueOf(Class enumType,String value)。
由于这会导致不直观的行为,因此Java创建者认为这应该是一个错误; 相应的检查是在Java 1.7中实现的。 如果您的valueOf
方法与Enum.valueOf
一样(或应该表现),您只需将其删除即可。 否则,重命名它可以解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.