我不知道我想做的事情是否可行,但无论如何我都会问。
我想知道在这个枚举的构造函数中构造了哪个枚举值。 这是伪代码:
enum SomeEnum {
VALUE_ONE, VALUE_TWO;
private SomeEnum() {
System.out.print(*some-reflection-magic*);
}
}
因此,当我在其他地方拨打SomeEnum.VALUE_ONE
时,我会在System.out
上获得“VALUE_ONE”。
不要问为什么,这只是为了好玩:)
答案 0 :(得分:4)
System.out.println(this);
打印enum
常量实例化。
示例:
public enum EnumExcersise {
RED(5) {
@Override
public String getHexVal() {
return "Red Value";
}
}, BLUE(4) {
@Override
public String getHexVal() {
return "Blue Value";
}
}, GREEN(3) {
@Override
public String getHexVal() {
return "Green Value";
}
}, YELLOW(8) {
@Override
public String getHexVal() {
return "Yellow Value";
}
};
public abstract String getHexVal();
public int getVal() {
return value;
}
private int value;
private EnumExcersise(int ipValue) {
System.out.println(this);
this.value = ipValue;
}
}
打印:
RED BLUE GREEN YELLOW
答案 1 :(得分:4)
如果你想要每次打印枚举常量,那么答案就是否定。枚举值被实例化一次(并且在很多方面构成JVM上的典型单例实现),通常是在加载enum
类型时。这就是为什么在enum
的构造函数中打印时,你会发现所有的值都被实例化了。
答案 2 :(得分:2)
Enum成员遵循常规课程static
成员的逻辑。它们都是在类初始化时初始化的,这是在运行代码首次引用类时发生的。
答案 3 :(得分:0)
所有枚举对象值仅在初始加载到JVM时自动创建一次:
enum SomeEnum {
VALUE_ONE, VALUE_TWO;
private SomeEnum() {
System.out.println("Constructing SomeEnum " + name());
}
public static void main(String[] args) {
System.out.println(VALUE_ONE);
}
}
输出:
Constructing SomeEnum VALUE_ONE
Constructing SomeEnum VALUE_TWO
VALUE_ONE