Поскольку у вас есть представление о том, какой класс вы ищете, вы можете просто спросить enum, знает ли он, что вас интересует:
public enum MyColor
{
RED ("red", Color.RED),
BLUE ("blue", Color.BLUE),
TAUPE ("brownish", new COLOR(80,64,77));
private final String _name;
private final Color _color;
MyColor(String name, Color color)
{
_name = name;
_color = color;
}
public static Color parseColor(String colorName)
{
for (MyColor mc : MyColor.values())
{
if (mc._name.equalsIgnoreCase(colorName))
return mc._color;
}
return null;
}
}
Однако включение строк в несколько перечислений в поисках соответствия ухудшает безопасность типов, которую вы получаете с перечислениями. Если вы сопоставите «красный» с MyColor.RED
и NuclearThreatWarningLevel.RED
, то вы, по крайней мере, можете получить неправильный класс. В худшем случае вы можете оказаться в подземном бункере в течение 6 месяцев, ожидая, пока воздух не очистится, а все, что вам нужно, - это машина, окрашенная в красный цвет:)
Было бы лучше изменить эту область вашего кода, если это возможно, чтобы вам не приходилось динамически преобразовывать строку в экземпляр одного из нескольких классов. Если вы расширите свой ответ, включив в него проблему, которую вы пытаетесь решить, возможно, у сообщества SO появятся некоторые идеи.