W Javie można” t podać wartości porządkowe jawnie w ogóle. Oni zawsze autoinkrementacji, od 0, bez kontroli nad nim.
Jeśli chcesz uzyskać inne wartości niestandardowe, musisz umieścić je w wywołaniach konstruktora i przechowywać je samodzielnie. Ci może dostać AUTOINCREMENT, ale icky jak cholery:
import java.util.EnumSet;
// Please don't ever use this code. It's here so you can point and laugh.
enum Foo
{
A(10), B, C, D(5000), E, Fish;
private static int nextValue;
private int value;
private Foo()
{
this(Counter.nextValue);
}
private Foo(int value)
{
this.value = value;
Counter.nextValue = value + 1;
}
public int getValue()
{
return value;
}
private static class Counter
{
private static int nextValue = 0;
}
}
public class Test
{
public static void main(String[] args)
{
for (Foo foo : EnumSet.allOf(Foo.class))
{
System.out.println(foo.name() + " " +
foo.ordinal() + " " +
foo.getValue());
}
}
}
Uwaga potrzeba zagnieżdżonej klasy, ponieważ nie można uzyskać dostęp do pól statycznych wewnątrz konstruktora enum. Ick, ick, ick. Proszę tego nie robić.
'Jest tu więc można wskazać i laugh.' Haha. Dobry! –
domyślny konstruktor musi zaktualizować Counter.nextValue i prawdopodobnie możesz usunąć nextValue bezpośrednio w Foo. – Yuliy
@Yuliy: Konstruktor bez parametrów wywołuje sparametryzowaną, więc aktualizuje Counter.nextValue. Umieszczenie nextValue bezpośrednio w Foo * nie * działa - przynajmniej nie w wersji javac, której używam. Zapobiega uzyskiwaniu dostępu do pól statycznych w konstruktorze. –