参见英文答案 > Enums shared static look-up method 2个
我有几个带有name属性的枚举和一个byName方法,对于所有这些都大致相同:
public static Condition byName(String name) throws NotFoundException {
for (Condition c : values()) {
if (c.name.equals(name)) {
return c;
}
}
throw new NotFoundException("Condition with name [" + name + "] not found");
}
由于byName方法在不同的枚举中重复,我想将它分解在一个地方并避免重复的代码.
然而:
>枚举不能扩展抽象类
> Java8接口使用默认方法无法访问values()方法
我知道这可能是用AspectJ完成的,但是我宁愿不为这样简单的东西引入编译时编织,而Spring AOP(我手边有这个是Spring项目)只允许绑定现有的方法和不添加新的.
最佳答案
这是我在同样情况下所做的事情:
public interface EnumWithNames {
String getName();
static
当我需要通过名字找到枚举值时,我打电话给:
Condition c = EnumWithNames.byName(Condition.class,"Name 1");
注意cls.getEnumConstants()与values()相同.