【问题标题】:Java Custom enumJava 自定义枚举
【发布时间】:2014-03-19 11:16:45
【问题描述】:

我有一张表,想使用枚举来保存状态。我创建了一个枚举如下

/**
 * Enumeration for Status
 * 
 * 
 * Current defined values are :
 * <ul>
 *  <li>ACTIVE = 1</li>
 *  <li>INACTIVE = 2</li>
 * </ul>
 */
public enum Status {

    /**
     * ACTIVE (Ordinal 1).
     */
    ACTIVE(1),

    /**
     * INACTIVE (Ordinal 2).
     */
    INACTIVE(2),



    private int value;

    private Status(int value) {
        this.value = value;
    }



   public static void main (String ars[]){
       for (Status str : Status.values()) {
           System.out.println("====str==========="+str.name() +"::::::: "+str.ordinal());
       }
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }


}

如何从 1 中获取序数值。我的输出是这样的

====str===========ACTIVE::::::: 0
====str===========INACTIVE::::::: 1

实际上我已将此枚举映射到我的实体,并且我已按如下方式使用它

@Column(name = "STATUS",nullable=false)
    @Enumerated(EnumType.ORDINAL)
    private Status status; 

如何将 Active 状态保存为 1 ...?

【问题讨论】:

  • enum 永远不应该是可变的。 你永远不应该在 enum 上使用 setXXX 方法,而 enum 不应该永远 b> 有非final 变量。拥有可变的enum 违反了enum 提供的许多保证。

标签: java enums enumeration


【解决方案1】:

您可以覆盖枚举的 toString() 方法或提供一个 getter。

public enum Status {

    /**
     * ACTIVE (Ordinal 1).
     */
    ACTIVE(1),

    /**
     * INACTIVE (Ordinal 2).
     */
    INACTIVE(2); // Note the semicolon



    private final int value;

    private Status(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }

    // OR
    @Override
    public String toString() {
         return String.valueOf(value);
    }
}

然后就可以调用了

System.out.println(ACTIVE); // toString is called

System.out.println(ACTIVE.getValue());

【讨论】:

  • 实际上我已将此枚举映射到我的实体,并且我已按如下方式使用它
【解决方案2】:

使用getValue() 代替ordinal()ordinal() 并不神奇地知道调用你的方法,它只是返回序数。

【讨论】:

    【解决方案3】:

    打印str.getValue()

    ordinal 为您提供默认值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多