Тема: Як отримати екземпляр enum за значеннями його полів ?
Є в мене enum :
enum FlipRotate2dEnum {
NO((byte)0), None ((byte)0),
R2((byte)1), RotateTwice ((byte)1),
FX((byte)2), FlipX ((byte)2),
FY((byte)3), FlipY ((byte)3),
D1((byte)4), ReflectDiagonal1 ((byte)4),
D2((byte)5), ReflectDiagonal2 ((byte)5),
RC((byte)6), RotateClockwise ((byte)6),
RN((byte)7), RotateNonClockwise((byte)7);
public final byte value;
FlipRotate2dEnum(byte value) { this.value = value; }
}
Я хочу за значенням поля value отримати відповідний екземпляр FlipRotate2dEnum з короткою назвою.
Наприклад, код :
class EnumTest {
public static void main(String[] args) {
for(byte i = 0; i < 8; ++i) {
FlipRotate2dEnum v = FlipRotate2dEnum.valueOf(i); // або
// FlipRotate2dEnum v = (FlipRotate2dEnum)i; // або ще щось такого типу.
System.out.println(i + " " + v);
}
}
}
має вивести в System.out :
0 NO
1 R2
2 FX
3 FY
4 D1
5 D2
6 RC
7 RN
Для цього, як варіант, можна в FlipRotate2dEnum вставити код :
static final FlipRotate2dEnum[] UniqueValues = { NO, R2, FX, FY, D1, D2, RC, RN };
static FlipRotate2dEnum valueOf(byte value) { return UniqueValues[value]; }
і він буде працювати. Але в мене якесь відчуття, що це не зовсім правильно.
Чи існує інше (гарніше) рішення ?