Enum学习中的compareTo方法分析

今天看工厂模式的时候里面用了枚举定义各种可能的实例类型,就看了一下枚举,发现里面有一个compareTo(E o)方法
Enum学习中的compareTo方法分析_第1张图片
通过Object的getClass()方法比较两个两个比校对象类型是否一致,如果不一致,再调用Enum中的getDeclaringClass()方法,方法中如果超类不是Enum,就会返回超类
Enum学习中的compareTo方法分析_第2张图片
通过注释,发现同一个枚举类的两个枚举常量如果类结构不同那么他们getClass()的结果也会不同,就获取他们的超类,如果超类不是Enum,就看超类是否相同,相同的话就认为两个枚举类型相同,可以进行比较。
我测试的代码如下:
Enum学习中的compareTo方法分析_第3张图片
上面是一个接口,测试代码也在里面,有两个枚举类实现了它(这里用到一个)。CarInfo.HatchbackCarType和CarInfo.JeepCarType因为各自复写了CarInfo枚举类的一个新增方法buyer,导致了枚举常量的类不再相同,成为了CarInfo的内部类,但它们的超类都是CarInfo,是相同的,故getDeclaringClass()的结果是一样的,所以有控制台的输出,可以比较出大小,大小比较是用self.ordinal - other.ordinal,即比较序数,可以看出先后关系与前后的距离。
Enum学习中的compareTo方法分析_第4张图片

转载于:https://www.cnblogs.com/liunianfeiyu/p/7266466.html

你可能感兴趣的:(Enum学习中的compareTo方法分析)