如何使用值检索枚举名称。通过传递JOHN,我需要将值检索为单个
public enum Status {
JOHN("single"),
ALEX("married"),
MARTHA("not known");
}
是否可能具有默认值以及万一值不匹配的情况?
答案 0 :(得分:3)
像
那样定义您的枚举enum Status {
JOHN("single"), ALEX("married"), MARTHA("not known");
private String value;
private Status(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
现在获取值:
System.out.println(Status.JOHN.getValue());
在此为每个枚举定义一个参数化的构造函数,并将此值存储在成员变量中。
答案 1 :(得分:3)
为此,您需要定义一个构造函数和一个String
变量。然后,您可以创建一个getter方法以返回String
变量:
public enum Status {
JOHN("single"),
ALEX("married"),
MARTHA("not known");
private String value;
private Status(String str) {
value = str;
}
String getValue() {
return this.value;
}
}
然后获取值,您可以执行以下操作:
Status.JOHN.getValue()
要从String
获取枚举,可以使用valueOf()
方法:
Status.valueOf("JOHN").getValue();
但是,如果输入的String
与枚举不对应,则会抛出错误。您可以将其包装在try-catch中以为其分配默认值:
try {
Status.valueOf("JOHN").getValue();
} catch(IllegalArgumentException e) {
//Assign default
}
但是,更好的设计可能是将可能性放入HashMap
中,并查看输入的String
是否在HashMap
中:
Map<String, Status> status = new HashMap<>();
status.put("JOHN", Y.JOHN);
if(status.containsKey(input)) {
//Do stuff
} else {
//Assign default
}
答案 2 :(得分:1)
Java枚举是一个对象,在大多数方面与其他对象一样。您可以为其指定字段,方法和构造函数。
在这种情况下,您可以提供一个marriage
字段并将其设置在构造函数中,就像对其他任何对象一样。
在Java枚举的官方页面上查看官方示例,尤其是针对您的案例的带有行星的示例。 The Java Tutorials: Enum Types
还请注意,您可能不想将此特定数据表示为枚举。这样一来,您将只限于这3个人。 仅当您知道在此代码的整个生命周期中肯定只有特定的人员列表时,这才是适当的。否则,您应该只使用普通对象。
一个更好的主意可能是拥有一个结婚枚举,并为您的人们提供这种类型的字段。
public enum MarriageStatus
{
Married,
NotMarried,
Unknown;
}
public class Person
{
String name = "Unknown";
MarriageStatus marriageStatus = MarriageStatus.Unknown;
}