2016-06-11 97 views
0

我想比較Enum的值。如何比較枚舉值?

public enum En{ 
    Vanila("Good"), 
    Marlena("Luck"), 
    Garnela("Good"); 

    private String value; 

    private En(String s){ 
     this.value = s; 
    } 
} 

AS VanilaGarnela有比較它們應該返回真值相同。有兩種方法,一種是==運營商,另一種是equals()方法。我嘗試了自己的邏輯並將此方法添加到枚舉中。

public boolean compareValue(En e){ 
     return (this.value).equals(e.value); 
} 

現在它工作正常。

En a = En.Vanila; 
En b = En.Garnela; 
En c = En.Marlena; 

if(a.compareValue(b)){ 
    System.out.println("a == b"); 
} 
if(a.compareValue(c)){ 
    System.out.println("a == c"); 
} 
if(b.compareValue(c)){ 
    System.out.println("b == c"); 
} 

我知道我們不能忽略equals枚舉的方法(不知道爲什麼,我知道這是最後的,但不是邏輯上的理由。你也可以解釋,爲什麼我們不能忽略equals()在枚舉?)。

任何如何有任何其他方式來有效地做到這一點或者它是好的?

+2

枚舉點是他們每個人都有自己的身份。爲什麼搞砸了? –

+2

@NathanHughes,因爲Java允許它。 – UnKnown

+0

只需使用'=='進行身份比較,它的效果最好。 – markspace

回答

1

在枚舉中,每個實例都是爲了表示一件傑出的事情。枚舉值用於描述該事物,使其具有人類可讀性等。

因此,您的代碼沒有理由認爲Vanilla等於Marlena。爲它們設置相同的字符串值是沒有意義的。