我最近发现JDK6中的类ProcessBuilder没有覆盖equals()
。有理由吗?由于课程是可变的,我可以理解为什么它不覆盖hashCode()
。为什么ProcessBuilder类没有重写equals()?
我很惊讶地看到这个代码不工作:
ProcessBuilder x = new ProcessBuilder("abc", "def");
ProcessBuilder y = new ProcessBuilder("abc", "def");
if (x.equals(y)) { // they are never equal
// something important here
}
我看着成ProcessBuilder
类JDK6源代码,我没有看到一个覆盖了equals()
。
我有一种感觉,有一个更深的原因,超越了这一类。也许这是故意的?
即使有不可改变的集合,它不会改变,如果这个集合的元素是可变的,你是无论如何注定的事实......但至少,你有一个理智的_some_保证等于/的hashCode实现。我刚才固定我的一个宠物项目中的错误:参见[这里](https://github.com/fge/abic/commit/43102fbc46da0f6042452541f4a3b9cdcd60cbaa) – fge
@Peter:这是一个代码迷人片段。我从未考虑过这种情况。 – kevinarpe