代码之家  ›  专栏  ›  技术社区  ›  echox Petter Nordlander

比较和嵌套枚举

  •  1
  • echox Petter Nordlander  · 技术社区  · 16 年前

    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;
    

    我不明白为什么这个表达会是真的?

    将返回一个值>如果给定对象“小于”对象,则为0。

    等级3.A 是年级的“最大”元素,其序号为0。

    建造商 被称为 比例尺3.C级 ,其序号为2。

    因此,给定的表达式等于以下代码:

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

    A C

    2 回复  |  直到 16 年前
        1
  •  5
  •   Eyal Schneider    16 年前

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

    Scale3.Grade.A的序数为0,Scale3.Grade.C的序数为2。因此,C比A“大”。

    请参见Enum.compareTo(EO)的实现。

        2
  •  2
  •   aioobe    16 年前

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

    A 小于 C C 在里面 enum Grade {A, B, C}

    请注意 A , B 和 C 在中反转

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