如何从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)