我们怎么能比较两个枚举值和'<'?

Joe*_*Joe 25 java enums scjp ocpjp

如果枚举实现了Comparable,为什么无法与<或>进行比较?

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 };
Run Code Online (Sandbox Code Playgroud)

Ósc*_*pez 43

你可以这样做:

PinSize.BIGGEST.ordinal() > PinSize.BIG.ordinal()  // evaluates to `true`
Run Code Online (Sandbox Code Playgroud)

当然,假设在枚举之后BIGGEST 声明了.枚举中的序数值隐含地与声明顺序相关联,默认情况下,第一个值为赋值,第二个值为依此类推. BIG01

所以,如果哟声明这样的枚举,事情会起作用:

public enum PinSize {
    SMALLEST,  // ordinal value: 0
    SMALL,     // ordinal value: 1
    NORMAL,    // ordinal value: 2
    BIG,       // ordinal value: 3
    BIGGER,    // ordinal value: 4
    BIGGEST;   // ordinal value: 5
}
Run Code Online (Sandbox Code Playgroud)


Joa*_*uer 18

实施并不意味着你可以使用或.您只能使用具有数值的那些.Comparable <>

实现Comparable意味着有一种compareTo()方法.试试这个:

System.out.println(PinSize.BIG.compareTo(PinSize.BIGGER));
Run Code Online (Sandbox Code Playgroud)

compareTo()方法将返回int小于,等于或大于0的方法,具体取决于哪个值为"更大".在enum值的情况下,"大小"取决于枚举值定义的顺序.