當我在eclipse中將jdk1.6升級到jdk1.7時,下面的錯誤已經開始只在編譯模式下。(Error:valueOf(Class <T>,字符串)類型Enum <E>但不隱藏它)將版本從jdk1.6升級到jdk1.7
的錯誤是:
Name clash: The method valueOf(Class, String) of type TestEnum has the same erasure as valueOf(Class, String) of type Enum but does not hide it
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);
}
}
> Exception in thread "main" java.lang.IllegalArgumentException: No enum constant com.test.example.TestEnum.Abc at java.lang.Enum.valueOf(Enum.java:236) at com.test.example.TestEnum.main(TestEnum.java:22)
它返回具有指定名稱的指定枚舉類型的枚舉常量。該名稱必須完全匹配用於在此類型中聲明枚舉常量的標識符。但我沒有這樣的情況,名稱不同。以上有100個枚舉類,具有相同的實現。我不容易改變這種產品的廣泛變化。 – iMBMT 2015-03-19 12:47:06
從您的評論我收集valueOf-Methods行爲完全按預期,因此可以安全地刪除而不破壞源代碼兼容性。我將使用sed-script或其他方式進行項目全局搜索,並用'@Deprecated private static \ 1 _valueOf(Class <\1>''替換並替換'static([\ w \ d _] *)valueOf(類<\1>''。 – llogiq 2015-03-19 13:00:36