在“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;
A 比 C“大”,所以结果不应该是 < 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/