2010-05-04 90 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);