Я хочу преобразовать String
с в Enum
с для набора типов перечислений. Я использую интерфейс, чтобы отметить какой набор перечислений для преобразования и определить пару методов, используемых во время преобразования:
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
для реализации моего конвертера. 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;
}
}
}