Предложение: лучше использовать name()
, чтобы получить имя перечисления как String
, и всякий раз, когда вам нужно вернуть исходный Enum
из него, используйте valueOf()
метод - поскольку valueOf()
ожидает в качестве параметра имя , а не порядковый номер.Например:
enum Example {ONE, TWO};
String name = Example.ONE.name();
Example e = Example.valueOf(Example.class, name); // e has value ONE
Если вам определенно необходимо использовать порядковый номер, метод ordinal()
вернет индекс, который можно использовать для извлечения соответствующего Enum
из массива, возвращенного values()
метод.Как это:
int ordinal = Example.ONE.ordinal();
Example e = Example.values()[ordinal]; // e has value ONE
Как уже было отмечено, рассмотрите возможность использования EnumMap
, как указано в документации, это
СпециализированныйРеализация карты для использования с ключами типа enum.Все ключи в карте перечисления должны происходить из единственного типа перечисления, который указывается, явно или неявно, при создании карты.Enum карты представлены внутри как массивы.Это представление чрезвычайно компактно и эффективно.
РЕДАКТИРОВАТЬ
Если вам нужно связать разные коды для каждого элемента перечисления (кроме его автоматически назначенного)порядковый номер), вы всегда можете добавить его в качестве атрибута в перечисление вместе с геттерами и сеттерами, например:
public enum Manufacturers {
Honda(10),
GM(20),
Toyota(30),
Ferrari(40);
private int code;
Manufacturers(int code) {
this.code = code;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
}
Например:
Manufacturers m = Manufacturers.Honda;
System.out.println(m.getCode()); // prints 10
m.setCode(100);
System.out.println(m.getCode()); // prints 100
Просто знайте, что выне сможет восстановить объект Enum
из атрибута code
, так как это было определено программистом.