加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

为什么Java Enum需要在compareTo方法中检查class和declaringClas

发布时间:2020-12-15 04:48:48 所属栏目:Java 来源:网络整理
导读:Enum中的类型参数E被定义为 E extends Enum E.那么为什么在Enum实现源码 code中,我们还需要在compareTo方法中检查getClass()和getDeclaringClass()?当我在compareTo中设置不同的枚举类型对象时,我不认为编译器可以通过. 解决方法 它涵盖了比较原始类型和 va
Enum中的类型参数E被定义为< E extends Enum< E>>.那么为什么在Enum实现源码 code中,我们还需要在compareTo方法中检查getClass()和getDeclaringClass()?当我在compareTo中设置不同的枚举类型对象时,我不认为编译器可以通过.

解决方法

它涵盖了比较原始类型和 values obtained via unsafe / unchecked casts and conversions(例如Comparable或Object a)的情况:

static enum Fruit { Apple,Orange,Banana };
static enum Animal { Cat,Dog,Horse };

public static final void main (String[] args) throws Exception {   
    Enum f = Fruit.Apple;
    Enum a = Animal.Cat;
    f.compareTo(a);
}

在那里,compareTo会在显式getDeclaringClass比较中因ClassCastException而失败,因为它会传递第一个显式转换(Enum other =(Enum)o)而没有问题.

至于比较getClass,它被标记为该源中的“优化”.这是一个优化的原因是,如果value classes是相同的,那么它们肯定来自相同的枚举,因此没有必要调用略贵的getDeclaringClass.因为绝大多数枚举可能是简单的枚举(否)值类主体),它针对这种情况进行了优化.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读