최근 apache common의 enum 객체에서
switch case 문을 위해 java.lang의 enum 객체로 옮겨왔었는데
이런 메소드에서 Iterator의 제네릭을 사용하지 않아
계속 어노테이션을 붙여주어야만 했다.
그래서 지난 금요일 부터 오늘 월요일 오전까지
generic을 지원하는 방향으로 수정을 가했다.
먼저 Enum 객체를 들여다 보고
<T extends Enum<T>>을 추가해서
쉽게 넘어가보려고 했으나.
내부에서 사용중인
객체에서 제대로 지원을 못해주는 경우가 발생했다.
Enum에서 지원 못해주는
축약형 이름 지원을 사용하고 싶었는데
위에서 code로 표시 된 것이다.
그래서
이라는 간단한 인터페이스로 감싸주었는데
이것을 <T extends Enum<T>> 키워드를 추가하려고 하니
동시에 두가지 형태를 지원하는 것에 대한 자료를 찾아보았다.
한글 블로그 이지만 영어로 정리가 잘 되어 있다.
결론적으로
해결책은
이렇게 함으로써
두가지 형식을 검사할 수 있게 되었다.
이런 개선 사항에 즐거움을 느끼며 작성한다.
switch case 문을 위해 java.lang의 enum 객체로 옮겨왔었는데
public static Iterator iterator( Class enumClass ) {
이런 메소드에서 Iterator의 제네릭을 사용하지 않아
계속 어노테이션을 붙여주어야만 했다.
그래서 지난 금요일 부터 오늘 월요일 오전까지
generic을 지원하는 방향으로 수정을 가했다.
먼저 Enum 객체를 들여다 보고
<T extends Enum<T>>을 추가해서
쉽게 넘어가보려고 했으나.
내부에서 사용중인
public static getEnum( Class enumClass, String code ) {
객체에서 제대로 지원을 못해주는 경우가 발생했다.
Enum에서 지원 못해주는
축약형 이름 지원을 사용하고 싶었는데
위에서 code로 표시 된 것이다.
그래서
public interface CodeEnum {
public String getCode();
}
이라는 간단한 인터페이스로 감싸주었는데
이것을 <T extends Enum<T>> 키워드를 추가하려고 하니
동시에 두가지 형태를 지원하는 것에 대한 자료를 찾아보았다.
한글 블로그 이지만 영어로 정리가 잘 되어 있다.
결론적으로
해결책은
public static <T extends Enum<T> & CodeEnum> T getEnum( Class<T> enumClass, String code ) {
이렇게 함으로써
두가지 형식을 검사할 수 있게 되었다.
이런 개선 사항에 즐거움을 느끼며 작성한다.
'direct' 카테고리의 다른 글
| Ruby Access visiblity keyword(private, protected, public) are not actually keywords these're Functions .. and Does super keyword do? (0) | 2007/12/31 |
|---|---|
| Enum class 과 Generic method 그리고 Prefer Wildcard (0) | 2007/12/31 |
| LG my070 의 Wifi 폰 WPU-7000을 해킹해보고 싶다.. (0) | 2007/12/24 |
| Home Network의 완성~! (0) | 2007/12/24 |

