Я пытаюсь найти набор Enum, зная, что часто будет несовпадение, которое генерирует исключение: я хотел бы проверить значение, существовавшее до выполнения поиска, чтобы избежать исключения. Мое перечисление выглядит примерно так:Проверьте правильные значения перечисления перед использованием enum
public enum Fruit {
APPLE("apple"),
ORANGE("orange");
;
private final String fruitname;
Fruit(String fruitname) {
this.fruitname = fruitname;
}
public String fruitname() {return fruitname;}
}
и я хочу, чтобы проверить, если, скажем, «банан» является одним из моих значений перечислений, прежде чем пытаться использовать соответствующие перечисления. Я мог бы перебирает допустимые значения, сравнивающих мою строку
Fruit.values()[i].fruitname
, но я хотел бы быть в состоянии сделать что-то вроде (pseduo-код):
if (Fruit.values().contains(myStringHere)) {...
Возможно ли это? Должен ли я использовать что-то еще (Массивы? Карты?)?
EDIT: в конце концов я пошел с предложением NawaMan, но спасибо всем за полезный вход.
«values ()» каждый раз создает клонированный массив, поэтому лучше не называть его слишком часто. Вызывайте его только один раз и кэшируйте результаты, или используйте «EnumSet.allOf (Fruit.class)». – dogbane
В JDK 1.7 исправлено. В JDK 1.5 есть комментарий, чтобы исправить это позже. Не знаю, что произойдет в JDK 1.6. – alexsmail
Обратите внимание, что это решение является медленным для многих значений. Лучше сделайте что-то вроде http://stackoverflow.com/a/2546726/260805. – Ztyx