2016-06-11 11 views
0

Я хочу сравнить значение Enum, как в примере.Как сравнить значение Enum?

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

    private String value; 

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

AS Vanila и Garnela имеют такое же значение, сравнивая их должны вернуть истинный. Есть два способа: == оператор, а второй - 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"); 
} 

Я знаю, что мы не можем переопределить равно методы в перечислении (Не знаю, почему, я знаю, что это финал, но не логически причина. Можете ли вы объяснить, почему мы не можем переопределить равна() в перечислении?).

Любое как есть любой способ сделать это эффективно или это нормально?

+2

Пункт перечисления - это каждый из них имеет свою личность. зачем это испортить? –

+2

@NathanHughes, потому что Java разрешает это. – UnKnown

+0

Просто используйте '==' для сравнения идентичности, он работает лучше всего. – markspace

ответ

1

В enum каждый экземпляр предназначен для обозначения выдающейся вещи. Значение перечисления используется для описания этой вещи, делает ее общедоступной и т. Д.

Поэтому нет причин для того, чтобы ваш код считал, что ваниль может быть равна Марлене. И нет смысла устанавливать одинаковые строковые значения для обоих из них.

Смежные вопросы