У меня есть следующее перечисление
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");
для поиска конкретного Animal. Тем не менее, я не знал, что если совпадение не найдено, бросается 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" для каждого перечисления млекопитающих. Я полагаю, лучший выбор - просто создать класс утилиты, который принимает аргумент Mammal и ищет его? Возможно, есть более аккуратное решение.