web-dev-qa-db-fra.com

Comment ne pouvons-nous pas comparer deux valeurs d'énums avec '<'?

Si Enum implémente comparable, alors pourquoi ne peut pas comparer avec <ou>?

public class Dream    
{
    public static void main(String... args)
    {
        System.out.println(PinSize.BIG == PinSize.BIGGER); //false
        System.out.println(PinSize.BIG == PinSize.BIG); //true
        System.out.println(PinSize.BIG.equals(PinSize.BIGGER));//false
        System.out.println(PinSize.BIG > PinSize.BIGGERER);// compilation error
        //can't be compared
        System.out.println(PinSize.BIG.toString().equals(PinSize.BIGGER));// #4
        PinSize b = PinSize.BIG ;
        System.out.println( b instanceof Comparable);// true
    }  
}
enum PinSize { BIG, BIGGER, BIGGERER };
26
Joe

Mise en œuvre Comparable pas Moyenne que vous puissiez utiliser < Ou >. Vous pouvez seulement Utilisez ceux avec des valeurs numériques.

Mise en œuvre Comparable signifie qu'il y a une méthode compareTo() méthode. Essaye ça:

System.out.println(PinSize.BIG.compareTo(PinSize.BIGGER));

Le compareTo() La méthode retournera un int inférieur à, égal ou supérieur à 0, selon la valeur "plus grande". Dans le cas des valeurs enum, la "taille" dépend de l'ordre des définitions de valeur Enum.

17
Joachim Sauer