Что такое Java-эквивалент С#:
enum Foo
{
Bar = 0,
Baz = 1,
Fii = 10,
}
Что такое Java-эквивалент С#:
enum Foo
{
Bar = 0,
Baz = 1,
Fii = 10,
}
Если вам нужны атрибуты для вашего 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.
Если у вас есть смежный диапазон значений, и все, что вам нужно, это целочисленное значение, вы можете просто объявить перечисление минимально:
public enum NUMBERZ {
ZERO, ONE, TWO
}
а затем получить значение int следующим образом:
int numberOne = NUMBERZ.ONE.ordinal();
Однако, если вам нужен недопустимый диапазон (как в вашем примере, где вы переходите с 1 на 10), вам нужно будет написать собственный конструктор enum, который устанавливает вашу собственную переменную-член, и предоставит метод get для этой переменной, как описано в других ответах здесь.
Это:
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')
Похоже, вы хотите что-то вроде этого:
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 станет отличным местом, чтобы узнать больше.
public enum Foo {
Bar(0),
Baz(1),
Fii(10);
private final int someint;
Foo(int someint) {
this.someint = someint;
}
}
В перечислениях Java очень похожи на другие классы, но компилятор Java знает, как немного по-разному рассматривать в разных ситуациях. Поэтому, если вам нужны данные, как вам кажется, вам нужно иметь переменную экземпляра для данных и соответствующий конструктор.