2014-03-19 156 views
1

我有一个表,并希望使用枚举保存状态。我创建了一个枚举作为Java自定义枚举

/** 
* 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; 

如何将活动状态保存为1 ...?

+3

**的'enum'不应该是可变的。**你不应该有一个'setXXX'方法上的' enum'和'enum'应该**从不**具有非'final'变量。有一个可变的'enum'违反了'enum'提供的许多保证。 –

回答

0

print str.getValue()

序号给出了默认值。

1

使用getValue()而不是ordinal()ordinal()不会神奇地知道调用您的方法,它只是返回序号。

3

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

public enum Status { 

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

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



    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()); 
+0

其实我已经将这个枚举映射到了我的实体,我已经使用它如下 – Charitha