在Java中从枚举获取字符串值
我有一个这样定义的枚举,我希望能够获得各个状态的字符串。我应该如何编写这样的方法 我可以获取状态的int值,但也希望能够从int中获取字符串值在Java中从枚举获取字符串值,java,enums,Java,Enums,我有一个这样定义的枚举,我希望能够获得各个状态的字符串。我应该如何编写这样的方法 我可以获取状态的int值,但也希望能够从int中获取字符串值 public enum Status { PAUSE(0), START(1), STOP(2); private final int value; private Status(int value) { this.value = value } public int getV
public enum Status {
PAUSE(0),
START(1),
STOP(2);
private final int value;
private Status(int value) {
this.value = value
}
public int getValue() {
return value;
}
}
如果
status
类型为status
enum,status.name()
将为您提供其定义的名称。您可以使用values()
方法:
例如,
Status.values()[0]
将在您的案例中返回PAUSE,如果打印它,将调用toString()
,并打印“PAUSE”。您可以将此方法添加到您的状态枚举中:
public static String getStringValueFromInt(int i) {
for (Status status : Status.values()) {
if (status.getValue() == i) {
return status.toString();
}
}
// throw an IllegalArgumentException or return null
throw new IllegalArgumentException("the given number doesn't match any Status.");
}
public static void main(String[] args) {
System.out.println(Status.getStringValueFromInt(1)); // OUTPUT: START
}
使用给定的默认方法名()
public enum Category {
ONE("one"),
TWO ("two"),
THREE("three");
private final String name;
Category(String s) {
name = s;
}
}
public class Main {
public static void main(String[] args) throws Exception {
System.out.println(Category.ONE.name());
}
}
我相信enum的API中有一个.name(),使用起来非常简单,如以下示例所示:
private int security;
public String security(){ return Security.values()[security].name(); }
public void setSecurity(int security){ this.security = security; }
private enum Security {
low,
high
}
有了这个,你只需打电话就可以了
yourObject.security()
它返回高/低作为字符串,在本例中Status s=Status.PAUSE;System.out.println(s.name());这个答案将帮助您理解,您可以使用
Status.ordinal(),而不是定义0,1,2
@ArnaudDenoyelle:你应该避免使用ordinal(),见Joshua Bloch“有效的Java”@GarfieldKlon我同意。我不建议(也永远不会)依赖ordinal()
,因为在枚举中添加值将移动每个枚举的序号。我想指出,OP复制了ordinal()
的行为。对,只是添加Status.values()[0]
的类型是Status
而不是String
@JoeMahertoString()
似乎是官方文档中的首选方式:“大多数程序员应该使用toString()方法优先于此方法,因为toString方法可能会返回一个更为用户友好的名称。“()@Carstenstatus.name()
如果您想在代码中使用它(为了准确性和一致性),status.toString()
如果您想向用户显示它(为了可读性),它是合适的.为什么不重写toString以返回name??返回什么?一或一,存在差异(枚举名称或其值)如何打印“一”、“二”,我指的是枚举的值字符串?