2010-05-04 67 views
1

in“A Programmers Guide to Java SCJP Certification”我找到了一个我不能遵循的例子。compareTo和嵌套枚举

给定的枚举:

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是等级的“最大”的元素,它的序数是0。

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

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

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

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

一个ç “做大”,所以不应该是这个结果< 0?

回答

5

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

Scale3.Grade.A的顺序值是0,并且Scale3.Grade.C的顺序值是2。因此,C是比A“大”

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

+0

啊哈THX相反,我得到了“更大”的解释错了:-) – echox 2010-05-04 11:34:01

2

A比C大“,所以不应该是结果< 0?

没有,AC小,因为它在enum Grade {A, B, C}

注意自带C之前的ABC的顺序

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