Enum со значением int в Java

Что такое Java-эквивалент С#:

enum Foo
{
  Bar = 0,
  Baz = 1,
  Fii = 10,
}

Ответ 1

Если вам нужны атрибуты для вашего enum, вам необходимо определить его следующим образом:

public enum Foo {
    BAR (0),
    BAZ (1),
    FII (10);

    private final int index;   

    Foo(int index) {
        this.index = index;
    }

    public int index() { 
        return index; 
    }

}

Вы бы использовали его следующим образом:

public static void main(String[] args) {
    for (Foo f : Foo.values()) {
       System.out.printf("%s has index %d%n", f, f.index());
    }
}

Следует понимать, что enum - это просто ярлык для создания класса, поэтому вы можете добавлять все атрибуты и методы, которые вы хотите использовать для класса.

Если вы не хотите определять какие-либо методы на enum, вы можете изменить область переменных-членов и сделать их public, но это не то, что они делают в на веб-сайте Sun.

Ответ 2

Если у вас есть смежный диапазон значений, и все, что вам нужно, это целочисленное значение, вы можете просто объявить перечисление минимально:

public enum NUMBERZ {
        ZERO, ONE, TWO
}

а затем получить значение int следующим образом:

int numberOne = NUMBERZ.ONE.ordinal();

Однако, если вам нужен недопустимый диапазон (как в вашем примере, где вы переходите с 1 на 10), вам нужно будет написать собственный конструктор enum, который устанавливает вашу собственную переменную-член, и предоставит метод get для этой переменной, как описано в других ответах здесь.

Ответ 3

Это:

enum Foo
{
  Bar(0),
  Baz(1),
  Fii(10);

  private int index;

  private Foo(int index) {
      this.index = index;
  }
}

Обратите внимание, что для получения значения перечисления из индекса Foo.valueOf(1) (*) не будет работать. Вам нужно сделать код самостоятельно:

public Foo getFooFromIndex(int index) {
    switch (index) {
    case 0:
        return Foo.Bar;
    case 1:
        return Foo.Baz;
    case 10:
        return Foo.Fii;

    default:
        throw new RuntimeException("Unknown index:" + index);
    }
}

(*): Enum.valueOf() возвращает перечисление из строки. Таким образом, вы можете получить значение Bar с помощью Foo.valueOf('Bar')

Ответ 4

Похоже, вы хотите что-то вроде этого:

public enum Foo {
    Bar(0),
    Baz(1),
    Fii(10);

    private int number;

    public Foo(int number) {
       this.number = number;
    }

    public int getNumber() {
        return number;
    }
}

Для начала Sun Java Enum Tutorial станет отличным местом, чтобы узнать больше.

Ответ 5

public enum Foo {
    Bar(0),
    Baz(1),
    Fii(10);

    private final int someint;
    Foo(int someint) {
        this.someint = someint;
    }
}

В перечислениях Java очень похожи на другие классы, но компилятор Java знает, как немного по-разному рассматривать в разных ситуациях. Поэтому, если вам нужны данные, как вам кажется, вам нужно иметь переменную экземпляра для данных и соответствующий конструктор.