Java中的参数化枚举

时间:2014-05-12 05:38:28

标签: java enums

我有以下枚举

public static enum STATUS{
 STRTD, COMP
}

我希望为枚举提供更多含义,并使编码中的枚举属性易于识别。但我无法修改枚举如下 -

public static enum STATUS{
 STARTED("STRTD"), COMPLETED("COMP")
}

请建议它可行。如果可能,那我在哪里做错了。

4 个答案:

答案 0 :(得分:6)

这是因为您需要为枚举定义构造函数。添加一个合适的构造函数:

public static enum STATUS{
    STARTED("STRTD"), COMPLETED("COMP");
    public final String status;
    private STATUS(String status) {
        this.status = status;
    }
}

现在您可以从枚举中访问此字段:

System.out.println(STATUS.STARTED.status);

以防万一你将在用于JavaBean标准的工具中使用这个枚举(正如@chrylis所指出的那样):

public static enum STATUS{
    STARTED("STRTD"), COMPLETED("COMP");
    private final String status;
    private STATUS(String status) {
        this.status = status;
    }
    public String getStatus() {
        return this.status;
    }
}

答案 1 :(得分:2)

public enum Status{ 

  STARTED("STRTD"), COMPLETED("COMP");
   private String status;

  Status(String status) {
    this.status=status;
  }
 }

答案 2 :(得分:1)

public enum Status {
    STARTED("STRTD"), COMPLETED("COMP");

    private String name;

    private Status(String name) {
        this.name = name
    }

    public String getName() {
        return this.name;
    }
}

答案 3 :(得分:0)

可以将 getNameByCode方法添加到枚举中以获取String值的名称 -

enum CODE {
    SUCCESS("SCS"), DELETE("DEL");

    private String status;

    /**
     * @return the status
     */
    public String getStatus() {
        return status;
    }

    /**
     * @param status
     *            the status to set
     */
    public void setStatus(String status) {
        this.status = status;
    }

    private CODE(String status) {
        this.status = status;
    }

    public static String getNameByCode(String code) {
        for (int i = 0; i < CODE.values().length; i++) {
            if (code.equals(CODE.values()[i].status))
                return CODE.values()[i].name();
        }
        return null;
    }