我最近發現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