enum 객체는 상속이 되지 않기 때문에 공통된 부분을 상속을 사용해서 사용하지 못한다. 대신에 인터페이스와 static 오퍼레이션을 사용한다면 이와 유사하게 재사용할 수 있다.
예를 들어, 특정 코드값을 갖는 enum을 선언시 다음과 같이 사용할 수 있다.
예를 들어, 특정 코드값을 갖는 enum을 선언시 다음과 같이 사용할 수 있다.
public class CodeTest {
private interface Codable {
String getCode();
}
private static <E extends Enum<E> & Codable> E from(
E[] values, String code) {
for (E e : values)
if (e.getCode().equals(code))
return e;
throw new IllegalArgumentException("Boring: " + code);
}
enum Gender implements Codable {
MALE("1"), FEMALE("2");
private final String code;
Gender(String code) { this.code = code; }
public String getCode() { return this.code; }
static Gender makeCode(String genderCode) {
return from(values(), genderCode);
}
}
enum FixedCode implements Codable {
THIS("001"), THAT("002");
private final String code;
FixedCode(String code) { this.code = code; }
public String getCode() { return this.code; }
static FixedCode makeCode(String fixedCode) {
return from(values(), fixedCode);
}
}
}
private interface Codable {
String getCode();
}
private static <E extends Enum<E> & Codable> E from(
E[] values, String code) {
for (E e : values)
if (e.getCode().equals(code))
return e;
throw new IllegalArgumentException("Boring: " + code);
}
enum Gender implements Codable {
MALE("1"), FEMALE("2");
private final String code;
Gender(String code) { this.code = code; }
public String getCode() { return this.code; }
static Gender makeCode(String genderCode) {
return from(values(), genderCode);
}
}
enum FixedCode implements Codable {
THIS("001"), THAT("002");
private final String code;
FixedCode(String code) { this.code = code; }
public String getCode() { return this.code; }
static FixedCode makeCode(String fixedCode) {
return from(values(), fixedCode);
}
}
}
반응형
'Homo Faber > Idioms' 카테고리의 다른 글
소프트웨어 공학의 진실과 허위 (0) | 2008.03.05 |
---|---|
가벼운 클래스 (0) | 2008.02.27 |
Spring에서 annotation 태그 사용하기 (3) (0) | 2008.02.21 |
Spring에서 annotation 태그 사용하기 (2) (0) | 2008.02.20 |
Spring에서 annotation 태그 사용하기 (1) - @Autowired (0) | 2008.02.20 |