我们怎么能不能将两个枚举值与“<”进行比较呢?

2022-09-01 13:52:24

如果enum实现了可比性,那么为什么不能与<或>进行比较?

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 };

答案 1

您可以执行以下操作:

PinSize.BIGGEST.ordinal() > PinSize.BIG.ordinal()  // evaluates to `true`

当然,假设这是在枚举之后声明的。枚举中的序号值隐式绑定到声明顺序,默认情况下,第一个值被赋值,第二个值依此类推。BIGGESTBIG01

因此,如果 yo 像这样声明枚举,事情就会起作用:

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
}

答案 2

实现可比较并不意味着您可以使用 或 。您只能使用带有数值的那些。<>

实现可比较意味着有一个 compareTo() 方法。试试这个:

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

compareTo() 方法将返回小于、等于或大于 0 的值,具体取决于哪个值“更大”。对于值,“大小”取决于枚举值定义的顺序。intenum