java – 为什么在Enum中hashCode()引用Object hashCode()实现,而
发布时间:2020-12-14 05:53:09 所属栏目:Java 来源:网络整理
导读:参见英文答案 What is the reason behind Enum.hashCode()?7个 我一直以为enum hashCode在Java中引用了序数,因为序数似乎是hashCode的完美候选者,但事实证明它的枚举hashCode实际上是指默认的hashCode对象实现. 我明白,这并不与JLS相矛盾,但这让我感到惊讶,
参见英文答案 >
What is the reason behind Enum.hashCode()?7个
我一直以为enum hashCode在Java中引用了序数,因为序数似乎是hashCode的完美候选者,但事实证明它的枚举hashCode实际上是指默认的hashCode对象实现. 我明白,这并不与JLS相矛盾,但这让我感到惊讶,我想不出为什么会这样做.虽然我猜JVM,可能依赖于它以某种方式提供独特的保证,但这不再适用于64位JVM. 我已经检查过JDK 1.6和最新的JDK 7,这两种方式都是一样的. 有没有人知道原因,是这样做的? 使用序数作为hashCode是完全合理的,因为它满足了所需的所有凭证,而且从一个JVM开始到另一个JVM开始甚至是一致的,这不是必需的,但是很好. 解决方法
想象一下这个琐碎,完全构成的场景:
interface MediaType {} enum BookTypes implements MediaType { HARDCOVER; } enum MagazineTypes implements MediaType { MONTHLY; } Map<MediaType,MediaItem> itemMap = new HashMap<MediaType,MediaItem>(); itemMap.put(BookTypes.HARDCOVER,new Book()); itemMap.put(MagazineTypes.MONTHLY,new Magazine()); 我认为很明显为什么你不想在这个实例中使用ordinal作为哈希码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |