java - compareTo 和嵌套枚举

标签 java

在“A Programmers Guide to Java SCJP Certification”中,我找到了一个我无法理解的例子。

这是给定的枚举:

enum Scale3 {
    GOOD(Grade.C), BETTER(Grade.B), BEST(Grade.A);

    enum Grade {A, B, C}

    private Grade grade;

    Scale3(Grade grade) {
        this.grade = grade;
    }

    public Grade getGrade() { return grade; }
}

这是给定的表达式:

Scale3.GOOD.getGrade().compareTo(Scale3.Grade.A) > 0;

我不明白为什么这个表达式会为真?
返回值为 2。

如果给定对象“小于”对象,

compareTo() 将返回一个 > 0 的值。

Scale3.Grade.A 是 Grades 中“最大”的元素,其序号为 0。

Scale3.GOOD是Scale3中“最大”的元素,它的序号也是0。

Scale3的构造函数调用Scale3.Grade.C,序号为2。

所以给定的表达式等于下面的代码:

Scale3.Grade.C.compareTo(Scale3.Grade.A) > 0;

AC“大”,所以结果不应该是 < 0?

最佳答案

枚举实现了 Comparable 接口(interface),比较是基于它们的序号(它们在枚举声明中的位置)。

Scale3.Grade.A的序数值为0,Scale3.Grade.C的序数值为2,因此C比A“大”。

参见 Enum.compareTo(E o) 的实现。

关于java - compareTo 和嵌套枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2764697/

相关文章:

java - 如何在表中插入具有某种类型的行(postgresql)

java - SMTPClient 设置开放端口的超时

java - 野蝇: is possible to define websocket endpoint inside an EJB module of an EAR?

java - 单击android中的按钮时如何验证recyclerView项目

java - 如何更改 Sprite 随机出现在场景中的位置?

java - 超出最大允许计数 : Semaphore

java - 如何将文本从文本字段获取到另一个 JFrame 中的 JLable?

java - 无法使 selenium webdriver 单击复选框

Java Flight Recorder 未报告所有 GC 事件

java - 需要在集成测试用例中模拟bean