使用'valueOf'检索枚举会引发 RuntimeException - 用什么代替?
我有以下枚举
enum Animal implements Mammal {
CAT, DOG;
public static Mammal findMammal(final String type) {
for (Animal a : Animal.values()) {
if (a.name().equals(type)) {
return a;
}
}
}
}
我最初使用它来寻找特定的动物。但是,我不知道如果找不到匹配项,则会抛出一个。我想也许返回了一个空值。所以这给了我一个问题。如果找不到匹配项,我不想抓住这一点。我希望能够搜索类型的所有枚举,并且我不想为类型的每个枚举实现此静态“”。所以我的问题是,实现这种行为的最吉利的设计决策是什么?我将有这样的调用代码:Enum.valueOf(Animal.class, "DOG");
IllegalArgumentException
IllegalArgumentException
Mammal
findMammal
Mammal
public class Foo {
public Mammal bar(final String arg) {
Mammal m = null;
if (arg.equals("SomeValue")) {
m = Animal.findMammal("CAT");
} else if (arg.equals("AnotherValue") {
m = Human.findMammal("BILL");
}
// ... etc
}
}
正如你所看到的,我有不同类型的哺乳动物 - “动物”,“人类”,这些都是枚举。我不想为每个哺乳动物枚举实现“findMammal”。我想最好的办法是创建一个效用类,它采用哺乳动物参数并搜索它?也许有一个更整洁的解决方案。