我使用枚举创建了几个常量:
enum ids {OPEN, CLOSE};
OPEN值为0,但我希望它为100。这可能吗?
我使用枚举创建了几个常量:
enum ids {OPEN, CLOSE};
OPEN值为0,但我希望它为100。这可能吗?
当前回答
是的。你可以将数值传递给枚举的构造函数,如下所示:
enum Ids {
OPEN(100),
CLOSE(200);
private int value;
private Ids(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
有关更多信息,请参阅Sun Java语言指南。
其他回答
我认为你在看c++枚举器的时候会感到困惑。Java枚举器是不同的。
如果你习惯C/ c++枚举,这将是代码:
public class TestEnum {
enum ids {
OPEN,
CLOSE,
OTHER;
public final int value = 100 + ordinal();
};
public static void main(String arg[]) {
System.out.println("OPEN: " + ids.OPEN.value);
System.out.println("CLOSE: " + ids.CLOSE.value);
System.out.println("OTHER: " + ids.OTHER.value);
}
};
是的。你可以将数值传递给枚举的构造函数,如下所示:
enum Ids {
OPEN(100),
CLOSE(200);
private int value;
private Ids(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
有关更多信息,请参阅Sun Java语言指南。
Java枚举不同于C或c++枚举,后者实际上只是整数的标签。
Java枚举的实现更像类——它们甚至可以有多个属性。
public enum Ids {
OPEN(100), CLOSE(200);
private final int id;
Ids(int id) { this.id = id; }
public int getValue() { return id; }
}
最大的区别是它们是类型安全的,这意味着您不必担心将COLOR枚举分配给SIZE变量。
详见http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html。
public class MyClass {
public static void main(String args[]) {
Ids id1 = Ids.OPEN;
System.out.println(id1.getValue());
}
}
enum Ids {
OPEN(100), CLOSE(200);
private final int id;
Ids(int id) { this.id = id; }
public int getValue() { return id; }
}
@scottf,你可能会感到困惑,因为在ENUM中定义的构造函数。
我来解释一下。
当类装入器装入枚举类时,则枚举构造函数也被调用。什么! !是的,它叫做OPEN and close。OPEN为100,close为200
我能有不同的价值吗?
Yes,
public class MyClass {
public static void main(String args[]) {
Ids id1 = Ids.OPEN;
id1.setValue(2);
System.out.println(id1.getValue());
}
}
enum Ids {
OPEN(100), CLOSE(200);
private int id;
Ids(int id) { this.id = id; }
public int getValue() { return id; }
public void setValue(int value) { id = value; }
}
但是,这是不好的做法。枚举用于表示常量,如星期几,彩虹中的颜色,即这样一组预定义的常量。
如果你使用非常大的枚举类型,那么下面可能会有用;
public enum deneme {
UPDATE, UPDATE_FAILED;
private static Map<Integer, deneme> ss = new TreeMap<Integer,deneme>();
private static final int START_VALUE = 100;
private int value;
static {
for(int i=0;i<values().length;i++)
{
values()[i].value = START_VALUE + i;
ss.put(values()[i].value, values()[i]);
}
}
public static deneme fromInt(int i) {
return ss.get(i);
}
public int value() {
return value;
}
}