为什么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是相同的,那么它们肯定来自相同的枚举,因此没有必要调用略贵的 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |