小编Ste*_*nZL的帖子

为什么我们不允许在java中重写枚举中的hashcode

我现在只知道Java中没有Enum的hashCode()实现。它返回的只是 super.hashCode(),而其他不可变类(例如 String)都有自己的 hashCode() 实现。这使得 Enum 在不同 JVM 中使用时不安全。我认为ordinal()非常适合计算Enum的hashCode(),但是Enum中的hashCode()被定义为final,我无法覆盖它。我能想到的唯一解决方案是创建一个类似于 Enum 的全新类。有什么建议吗?


我想实现这样的目标:

enum Fruit {
        APPLE, POMEGRANATE, KIWI;
        
        @override
        public int hashCode() {
            return Objects.hash(super.ordinal());
        }
        @override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            }
            Fruit other = (Fruit)obj;
            return super.ordinal() == other.ordinal();
        }
}
Run Code Online (Sandbox Code Playgroud)

有什么解决办法吗?或者我想了解为什么这个解决方案不好,因此在java中不允许。

java enums hashcode

2
推荐指数
1
解决办法
160
查看次数

标签 统计

enums ×1

hashcode ×1

java ×1