compareTo和嵌套的枚举

ech*_*hox 1 java

在" Java SCJP认证程序员指南 "中,我找到了一个我无法遵循的例子.

这个给定的枚举:

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

这是给定的表达式:

Scale3.GOOD.getGrade().compareTo(Scale3.Grade.A) > 0;
Run Code Online (Sandbox Code Playgroud)

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

如果给定对象比对象"小",compareTo()将返回值> 0.

Scale3.Grade.A是Grades的"最大"元素,其序数为0.

Scale3.GOODScale3的"最大"元素,其序数也是0.

的构造Scale3被调用Scale3.Grade.C,其序号为2.

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

Scale3.Grade.C.compareTo(Scale3.Grade.A) > 0;
Run Code Online (Sandbox Code Playgroud)

AC大" ,所以不应该是<0?

Eya*_*der 5

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

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

请参阅Enum.compareTo(E o)的实现.