#java
#java
Вопрос:
Мне нужно инициализировать около 10-12 констант последовательными целыми числами. Я делаю это в данный момент:
class MyClass
{
public static final int A = 1;
public static final int B = 2;
public static final int C = 3;
public static final int D = 4;
.
.
.
}
Просто интересно, есть ли более аккуратный способ сделать это. Может быть, что-то вроде enum в C?
Ответ №1:
Предпочтительный способ — использовать enum
:
enum MyEnum {
A, B, C, D;
public final int value = ordinal() 1; // or " base index"
}
public static void main(String[] args) {
System.out.println(MyEnum.B.value); // 2
}
Или, если вы действительно предпочитаете примитивные целочисленные константы, вы могли бы сделать:
public static final int A, B, C, D;
static {
int x = 1;
A = x ; B = x ; C = x ; D = x ;
}
Это ограничивает область действия вспомогательной переменной счетчика ( x
).
Комментарии:
1. Разве этот конструктор не используется по умолчанию для значений? Зачем это реализовывать?
2. @Gene Martin: Нет, конструктор по умолчанию не инициализирует ни одно вызываемое поле
value
. И, кстати, я очистил ответ и вместо этого поместил присваивание в объявление.
Ответ №2:
Да, в Java есть перечисления начиная с 1.5. Или вы также могли бы сделать:
private static int x = 0;
public static final int A = x ;
public static final int B = x ;
public static final int C = x ;
public static final int D = x ;
.
.
Комментарии:
1. Я полагаю, вы объявили
D
дважды.2. взял на себя смелость исправить это.
Ответ №3:
Вы можете использовать enum в Java
enum MyEnum {
NOT_USED, A, B C, D, E, F
}
MyEnum x =
int num = x.ordinal();
Ответ №4:
Да, вы можете использовать enum. Что-то вроде:
class MyClass
{
public enum myEnum {
A, B, C,D
}
}
Ответ №5:
Перечисления в java работают иначе, чем перечисления в C. Вы могли бы сделать что-то вроде следующего, но тогда вам пришлось бы вызывать GetValue() каждый раз, когда вы хотели использовать константу, что может быть не совсем тем, что вам нужно.
public enum MyEnum {
A(1), B(2), C(3), D(4);
private final int value;
private MyEnum(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}