如何消除重复的枚举码?
2022-09-01 23:21:40
我有大量的枚举来实现这个接口:
/**
* Interface for an enumeration, each element of which can be uniquely identified by its code
*/
public interface CodableEnum {
/**
* Get the element with a particular code
* @param code
* @return
*/
public CodableEnum getByCode(String code);
/**
* Get the code that identifies an element of the enum
* @return
*/
public String getCode();
}
一个典型的例子是:
public enum IMType implements CodableEnum {
MSN_MESSENGER("msn_messenger"),
GOOGLE_TALK("google_talk"),
SKYPE("skype"),
YAHOO_MESSENGER("yahoo_messenger");
private final String code;
IMType (String code) {
this.code = code;
}
public String getCode() {
return code;
}
public IMType getByCode(String code) {
for (IMType e : IMType.values()) {
if (e.getCode().equalsIgnoreCase(code)) {
return e;
}
}
}
}
可以想象,这些方法在CodableEnum的所有实现中几乎都是相同的。我想消除这种重复,但坦率地说,我不知道该怎么做。我尝试使用如下所示的类:
public abstract class DefaultCodableEnum implements CodableEnum {
private final String code;
DefaultCodableEnum(String code) {
this.code = code;
}
public String getCode() {
return this.code;
}
public abstract CodableEnum getByCode(String code);
}
但事实证明这是相当无用的,因为:
- 枚举不能扩展类
- 枚举的元素(SKYPE、GOOGLE_TALK等)无法扩展类
- 我无法提供 getByCode() 的默认实现,因为 DefaultCodableEnum 本身不是 Enum。我尝试更改DefaultCodableEnum以扩展java.lang.Enum,但这似乎不是允许的。
有什么不依赖于反思的建议吗?谢谢 唐