2015-09-29 67 views
0

我有一个枚举类型枚举吸气返回错误值

public enum Type { 
     A("abc1", "desc1"), 
     B("abc2", "desc2"), 
     C("abc3", "desc3"), 
     D("abc4", "desc4"), 
     E("abc5", "desc5"); 

     private String value; 
     private String description; 

     private Type(String value, String description) { 
      this.value = value; 
      this.description = description; 
     } 

     public String getDescription() { 
      return description; 
     } 

     public void setDescription(String description) { 
      this.description = description; 
     } 

     public String getValue() { 
      return value; 
     } 

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

我通过下面的代码

Type[] type = Type.values(); 

for (int i = 0; i < type.length; i++) { 
    System.out.println(type[i].getValue()); 
} 

得到枚举值这个代码在服务器上运行。对于几天它运行良好,这代码的输出如下:

abc1 
abc2 
abc3 
abc4 
abc5 

但经过几天的输出变为

abc1 
abc2 
abc1 
abc4 
abc5 

如果我打印的说明,然后他们总是正确的。

我无法弄清楚为什么Type.getValue()可以枚举枚举值A的返回值值C.

+5

“但几天后,输出变为” - 这让我笑:)是否有其他正在运行的线程的地方? – Maroun

+4

可变枚举感觉像是一个非常糟糕的主意。使'价值'最终,移除setter。 –

+0

http://stackoverflow.com/questions/3820149/enum-values-is-an-order-of-returned-enums-deterministic –

回答

3

你枚举是可变的;有些东西叫setValue()

你应该使你的枚举immutable - 这是很有道理的。让一成不变的通过使场决赛,开沟制定者:

public enum Type { 
    A("abc1", "desc1"), 
    B("abc2", "desc2"), 
    C("abc3", "desc3"), 
    D("abc4", "desc4"), 
    E("abc5", "desc5"); 

    private final String value; 
    private final String description; 

    private Type(String value, String description) { 
     this.value = value; 
     this.description = description; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public String getValue() { 
     return value; 
    } 
} 

}