compareTo and nested Enums

Posted by echox on Stack Overflow See other posts from Stack Overflow or by echox
Published on 2010-05-04T11:08:44Z Indexed on 2010/05/04 11:18 UTC
Read the original article Hit count: 365

Filed under:

Hi, in "A Programmers Guide to Java SCJP Certification" I found an example which I can't follow.

This the given enum:

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; }
}

This is the given expression:

Scale3.GOOD.getGrade().compareTo(Scale3.Grade.A) > 0;

I don't understand why this expression will be true?
The return value will be 2.

compareTo() will return a value > 0 if the given object is "less" than the object.

Scale3.Grade.A is the "biggest" element of Grades, its ordinal number is 0.

Scale3.GOOD is the "biggest" element of Scale3, its ordinal number is also 0.

The constructor of Scale3 is called with Scale3.Grade.C, which ordinal number is 2.

So the given expression is equal to the following code:

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

A is "bigger" than C, so shouldn't be the result < 0?

© Stack Overflow or respective owner

Related posts about java