На самом деле существует довольно простой способ сделать это и сделать это так, чтобы это не зависело от конкретного enum
. Я столкнулся с этой проблемой, когда хотел использовать enum
s для заполнения различных частей пользовательского интерфейса.
Вот небольшой пример кода, чтобы показать вам, как я это сделал:
public int enumPosition(Enum<?> lookingFor, Enum<?>[] lookingIn)
{
for (int i = 0; i < lookingIn.length; i++)
{
if (lookingIn[i].getValue().equals(lookingFor.getValue()))
{
//Found Answer
}
}
}
Конечно, в зависимости от того, что вам нужно, есть хорошие способы настроить enum
для обеспечения лучшего доступа и поиска, вот что я имею в виду:
public enum ExampleEnum
{
firstValue("#1", 1),
secondValue("#2", 2),
thirdValue("#3", 3);
private final String id;
private final int somethingUseful;
ExampleEnum(String id, int usefulValue)
{
this.id = id;
this.somethingUseful = usefulValue;
}
public String getValue() { return id; }
public int getSomethingUseful () { return somethingUseful; }
public static ExampleEnumfromString(String text)
{
if (text != null)
{
for (ExampleEnumt : ExampleEnum.values())
{
if (text.equalsIgnoreCase(t.id))
{
return t;
}
}
}
//Usually best to throw an exception here
return ExampleEnum.firstValue;
}
//Useful for passing to adapters
public static String[] getValues()
{
String[] vals = new String[ExampleEnum.values().length];
int i = 0;
for (ExampleEnumt : ExampleEnum.values())
{
vals[i] = t.getValue();
i++;
}
return vals;
}
@Override
public String toString()
{
return getValue();
}
}