繁体   English   中英

(错误:valueOf(Class <T> ,String)类型Enum <E> 但不隐藏它)将版本从jdk1.6升级到jdk1.7

[英](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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM