Перечисление со значением int в Java


что такое Java-эквивалент C#:

enum Foo
{
  Bar = 0,
  Baz = 1,
  Fii = 10,
}
5   51   2009-11-05 19:52:28

5 ответов:

если вы хотите, чтобы атрибуты 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, но это не то, что они делают в пример на сайте ВС.

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

public enum NUMBERZ {
        ZERO, ONE, TWO
}

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

int numberOne = NUMBERZ.ONE.ordinal();

это:

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);
    }
}

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

звучит, как вы хотите, что-то вроде этого:

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

    private int number;

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

    public int getNumber() {
        return number;
    }
}

для начала Java Enum Tutorial было бы прекрасным местом, чтобы узнать больше.

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

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

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