枚举传递多个字段值?

时间:2015-12-10 13:48:44

标签: java enums

我一直在开始阅读有关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

发生了什么事?

2 个答案:

答案 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;
  }
}