今天看工廠模式的時候里面用了枚舉定義各種可能的實例類型,就看了一下枚舉,發現里面有一個compareTo(E o)方法
通過Object的getClass()方法比較兩個兩個比校對象類型是否一致,如果不一致,再調用Enum中的getDeclaringClass()方法,方法中如果超類不是Enum,就會返回超類
通過注釋,發現同一個枚舉類的兩個枚舉常量如果類結構不同那么他們getClass()的結果也會不同,就獲取他們的超類,如果超類不是Enum,就看超類是否相同,相同的話就認為兩個枚舉類型相同,可以進行比較。
我測試的代碼如下:
上面是一個接口,測試代碼也在里面,有兩個枚舉類實現了它(這里用到一個)。CarInfo.HatchbackCarType和CarInfo.JeepCarType因為各自復寫了CarInfo枚舉類的一個新增方法buyer,導致了枚舉常量的類不再相同,成為了CarInfo的內部類,但它們的超類都是CarInfo,是相同的,故getDeclaringClass()的結果是一樣的,所以有控制台的輸出,可以比較出大小,大小比較是用self.ordinal - other.ordinal,即比較序數,可以看出先后關系與前后的距離。