具有自定义值和默认值的枚举

时间:2018-10-12 18:03:44

标签: java string enums

如何使用值检索枚举名称。通过传递JOHN,我需要将值检索为单个

public enum Status {
    JOHN("single"),
    ALEX("married"),
    MARTHA("not known");
}

是否可能具有默认值以及万一值不匹配的情况?

3 个答案:

答案 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;
}
相关问题