如何从Java枚举中获取价值

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

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 

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

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

 public enum Constants{ YES("y"), NO("N") // No changes @Override public String toString() { return value; } } 

写入Getter和Setter以获取value和用途:

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

您还可以在枚举中添加一个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()); } } 

在枚举中创建一个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()); 

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

 String enumValue = Constants.valueOf("YES") 

Java doc ref: https ://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html#valueOf(java.lang.Class,% 20java.lang.String)