如何从Java枚举中获取价值

时间:2016-02-01 21:10:57

标签: java enums

我有一个看起来像的枚举:

public enum Constants{
  YES("y"), NO("N")
  private String value;

  Constants(String value){
    this.value = value;
  }
}

我有一个看起来像

的测试类
public class TestConstants{
 public static void main(String[] args){
   System.out.println(Constants.YES.toString())
   System.out.println(Constants.NO.toString())
 }
}

输出结果为:

YES
NO

而不是

Y
N

我不确定这里有什么问题?

5 个答案:

答案 0 :(得分:14)

您需要覆盖枚举的toString方法:

public enum Constants{
    YES("y"), NO("N")

    // No changes

    @Override
    public String toString() {
        return value;
    }
}

答案 1 :(得分:5)

value编写Getter和Setter并使用:

System.out.println(Constants.YES.getValue());
System.out.println(Constants.NO.getValue());

答案 2 :(得分:3)

您还可以在枚举中添加一个getter,只需调用它来访问实例变量:

public enum Constants{
    YES("Y"), NO("N");
    private String value;

    public String getResponse() {
        return value;
    }

    Constants(String value){
        this.value = value;
    }
}

public class TestConstants{
    public static void main(String[] args){
        System.out.println(Constants.YES.getResponse());
        System.out.println(Constants.NO.getResponse());
    }
}

答案 3 :(得分:3)

在枚举中创建一个getValue()方法,并使用它来代替toString()。

public enum Constants{
 YES("y"), NO("N")
 private String value;

 Constants(String value){
  this.value = value;
 }
}

 public String getValue(){
  return value;
 }

而不是:

System.out.println(Constants.YES.toString())
System.out.println(Constants.NO.toString())

(也缺少分号),请使用

System.out.println(Constants.YES.getValue());
System.out.println(Constants.NO.getValue());

希望这能解决你的问题。如果你不想在你的枚举中创建一个方法,你可以将你的值字段公开,但这会破坏封装。

答案 4 :(得分:0)