Table of Contents
Java Generic Enum
Java Enum 은 내부적으로 Enum class 를 이미 상속하고 있기 때문에,
다른 클래스를 상속할 수 없어, 기본적으로 Generic 을 구현할 수 없습니다.
하지만, interface 를 이용해 유사한 기능을 구현할 수 있습니다.
interface 생성
getEnumConstants() 를 이용해 값으로부터 Enum 을 생성할 수 있습니다.
public interface BaseEnum<V> {
V getValue();
static <E extends Enum<E> & BaseEnum<ID>, ID> E fromValue(ID value, Class<E> type) {
if (value == null) {
return null;
}
for (E e : type.getEnumConstants()) {
if (e.getValue().equals(value)) {
return e;
}
}
return null;
}
}
Enum 생성
String 으로 저장되는 Enum
public enum YNType implements BaseEnum<String> {
Y("Y"),
N("N");
private final String value;
YNType(String value) {
this.value = value;
}
@Override
public String getValue() {
return value;
}
public static YNType fromValue(String value) {
return BaseEnum.fromValue(value, YNType.class);
}
}
Integer 로 저장되는 Enum
public enum StatusType implements BaseEnum<Integer> {
BAD(1),
GOOD(2),
UNKNOWN(3);
private final Integer value;
StatusType(int value) {
this.value = value;
}
@Override
public Integer getValue() {
return value;
}
public static StatusType fromValue(Integer value) {
return BaseEnum.fromValue(value, StatusType.class);
}
}
사용법
YNType ynType1 = YNType.Y;
YNType ynType2 = YNType.fromValue("Y");
StatusType statusType1 = StatusType.GOOD;
StatusType statusType2 = StatusType.fromValue(1);
System.out.println(ynType1);
System.out.println(ynType2);
System.out.println(statusType1);
System.out.println(statusType2);
System.out.println(statusType2.getValue());