我一直在开始阅读有关enum
的内容,并编写了一个小型测试类来试用它:
public enum EnumTest{
ITEMONE ("The 1st option"),
ITEMTWO ("The 2nd option"),
ITEMTHREE ("The 3rd option");
EnumTest(String s){
System.out.println(s);
}
}
当我将其设置为ITEMONE
,“第二个选项”,当我将其设置为ITEMTWO
等时,它应该打印“第一个选项”,对吧?相反,它打印所有这些:
EnumTest e = EnumTest.ITEMONE;
打印
The 1st option
The 2nd option
The 3rd option
发生了什么事?
答案 0 :(得分:2)
加载类后,将静态创建枚举。由于print
语句在构造函数中,因此您将看到所有消息都已打印,因为所有枚举常量都已创建。
如果您只想查看一条特定邮件,可以尝试这样:
public enum EnumTest{
ITEMONE ("The 1st option"),
ITEMTWO ("The 2nd option"),
ITEMTHREE ("The 3rd option");
private final String message;
EnumTest(String s){
this.message = s;
}
public String getMessage() {
return message;
}
}
然后在main
:
System.out.println(EnumTest.ITEMONE.getMessage());
或者
EnumTest e = EnumTest.ITEMONE;
System.out.println(e.getMessage());
答案 1 :(得分:1)
枚举在加载时创建所有值。因此,当您第一次使用它时,会创建所有三个值 - 因此三条消息。
请注意,只需加载类(Class.forName()
)即可获得相同的结果。
EDIT。如果只想打印一个值,请不要在构造函数中执行此操作。
public enum EnumTest{
ITEMONE ("The 1st option"),
ITEMTWO ("The 2nd option"),
ITEMTHREE ("The 3rd option");
private final String string;
EnumTest(String s){
string = s;
}
public String getString() {
return string;
}
}