Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当定义为泛型类param时,如何获取枚举的valueOf&值及其在接口上实现的调用方法_Java_Spring_Generics_Enums - Fatal编程技术网

Java 当定义为泛型类param时,如何获取枚举的valueOf&值及其在接口上实现的调用方法

Java 当定义为泛型类param时,如何获取枚举的valueOf&值及其在接口上实现的调用方法,java,spring,generics,enums,Java,Spring,Generics,Enums,我想将字符串转换为一组枚举类型的枚举。我使用一个接口来标记要转换的枚举集,并定义转换过程中使用的两个方法: public interface SymbolEnum { String getCode(); String getDescription(); } 下面是我希望从字符串派生的枚举类型之一的示例: 如果字符串与枚举常量名称、枚举代码属性或枚举描述属性匹配,则我希望转换为该枚举。否则,代码将引发IllegalArgumentException 我正在使用Spr

我想将字符串转换为一组枚举类型的枚举。我使用一个接口来标记要转换的枚举集,并定义转换过程中使用的两个方法:

public interface SymbolEnum {
    String getCode();       
    String getDescription();
}
下面是我希望从字符串派生的枚举类型之一的示例:

如果字符串与枚举常量名称、枚举代码属性或枚举描述属性匹配,则我希望转换为该枚举。否则,代码将引发IllegalArgumentException

我正在使用Spring的转换器接口来实现我的转换器。转换器被参数化为转换器。我应该用什么做T?我知道T应该扩展Enum并实现SymbolEnum。以下是我尝试过的:

public class StringToSymbolEnum<T extends Enum<?> & SymbolEnum> implements Converter<String, T> {

    @Override
    public T convert(String source) {
        try {
            return T.valueOf(source); // compile error
        } catch (IllegalArgumentException notEnumConstant) {
            for (Enum enum : T.values()) { // compile error
                if (T.getDescription().equalsIgnoreCase(source) // compile error
                        || T.getCode().equalsIgnoreCase(source)) { // compile error
                    return T;
                }
            }
            throw notEnumConstant;
        }
    }

}

您需要将枚举的描述传递给StringToSymbolEnum构造函数。可能是在Enum.valueOf中使用的类,也可能是来自值的T[]

注:T应定义为:

T extends Enum<T> & SymbolEnum
而不是使用通配符。

要添加,可以使用类对象中的.getEnumConstants,而不是T.values
T extends Enum<T> & SymbolEnum