我要转换String
发送至Enum
s 表示一组枚举类型。我使用一个接口(interface)来标记要转换的枚举集,并定义转换期间使用的几个方法:
public interface SymbolEnum {
String getCode();
String getDescription();
}
这是 Enum
之一的示例我想从 String
派生的类型:
@RequiredArgsConstructor // using lombok
public enum Element implements SymbolEnum {
IRON("FE", "iron"),
HYDROGEN("H", "hydrogen"),
@Getter
private final String code;
@Getter
private final String description;
}
如果字符串与枚举常量名称、枚举代码属性或枚举描述属性匹配,那么我想转换为该枚举。否则,代码应该抛出 IllegalArgumentException
。
我正在使用 Spring 的 Converter
实现我的转换器的接口(interface)。 Converter
参数化为Converter<S,T>
。我应该用什么 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
构造函数。也许是 Class<T>
(用于 Enum.valueOf
)或 T[]
来自values
.
注意,T
应该定义:
T extends Enum<T> & SymbolEnum
而不是使用通配符。
关于java - 当定义为泛型类参数时,如何获取 Enum 的 valueOf 和值并调用其实现的接口(interface)上的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59779592/