在" 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.GOOD是Scale3的"最大"元素,其序数也是0.
的构造Scale3被调用Scale3.Grade.C,其序号为2.
所以给定的表达式等于以下代码:
Scale3.Grade.C.compareTo(Scale3.Grade.A) > 0;
Run Code Online (Sandbox Code Playgroud)
A比C大" ,所以不应该是<0?
枚举实现Comparable接口,比较基于它们的序号(它们在枚举声明中的位置).
Scale3.Grade.A的序数值为0,Scale3.Grade.C的序数值为2.因此,C比"大".
请参阅Enum.compareTo(E o)的实现.