我有一个看起来像的枚举:
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
我不确定这里有什么问题?
答案 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)
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)