为什么Java不允许在Enum中重写equals(Object)?

我注意到下面的代码片段...

@Override
public boolean equals(Object otherObject) {
    ...
}

...不允许Enum,因为方法equals(Object x)Enum定义为final 。 这是为什么?

我想不出任何需要重写Enum的equals(Object)用例。 我只是想知道这种行为背后的原因。


除了return this == other任何东西都是违反直觉的,并且违反最不惊讶的原则。 当且仅当它们是相同的对象并且覆盖这种行为的能力容易出错时,两个枚举常量预期是equal

同样的推理适用于hashCode()clone()compareTo(Object)name()ordinal()getDeclaringClass()


虽然JLS不会激励做出最终决定的选择,但在这里的枚举环境中提到等同。 片段:

Enum的equals方法是一个最终的方法,它只是在其参数上调用super.equals并返回结果,从而执行标识比较。


已经提供了一个非常直观的概念,说明enum实例(值)的含义是相等的。 允许重载equals方法会导致该概念被违反,导致意想不到的行为,错误等等。


正是因为Java设计人员无法想出任何可覆盖的Enum.equals(Object)的用例,所以这种方法被声明为final - 因此这种重写将是不可能的。

链接地址: http://www.djcxy.com/p/91837.html

上一篇: Why Java does not allow overriding equals(Object) in an Enum?

下一篇: How to compare Boolean?