为什么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?