Что касается ваших сомнений "А также каждый раз, когда мне нужно получить список цветов, создается новый массив", вы можете попробовать следующее:
public enum AnimalsEnum
{
CAT("An animal with four legs",
EnumSet.of(ColorsEnum.BROWN, ColorsEnum.GREY)),
BIRD("An animal with two legs and two wings",
EnumSet.of(ColorsEnum.GREY, ColorsEnum.YELLOW, ColorsEnum.ORANGE));
private AnimalsEnum(String description,
EnumSet<ColorsEnum> possible_colors)
{
this.description = description;
this.possible_colors = possible_colors;
}
public String getDescription()
{
return description;
}
public EnumSet<ColorsEnum> getPossibleColors()
{
return (possible_colors);
}
public static AnimalsEnum getAnimal(String description)
{
return (descr_map.get(description));
}
private String description;
private EnumSet<ColorsEnum> possible_colors;
private static HashMap<String, AnimalsEnum> descr_map;
static
{
descr_map = new HashMap<String, AnimalsEnum>();
for (AnimalsEnum animal : values())
{
descr_map.put(animal.getDescription(), animal);
}
}
} // enum AnimalsEnum
EDIT:
Изменен ответ, добавлен статический метод, который возвращает животное, соответствующее его описанию.
EDIT2:
Если вы не хотите сохранятьотдельный Enum
для ваших животных, вы можете попробовать это:
public class AnimalColors extends HashMap<String, EnumSet<ColorsEnum>>
{
private AnimalColors()
{
put("An animal with four legs", EnumSet.of(ColorsEnum.BROWN, ColorsEnum.GREY));
put("An animal with two legs and two wings", EnumSet.of(ColorsEnum.GREY, ColorsEnum.YELLOW, ColorsEnum.ORANGE));
}
public static AnimalColors get()
{
return my_instance;
}
private static AnimalColors my_instance = new AnimalColors();
} // class AnimalColors
Это просто на основе мнения.Вам решать.