對於編程項目我們製作了大約二十個我們需要的類。儘管我們沒有使用Object的equals()
和hashcode()
函數,是不是很好的編程習慣?我們認爲未來我們需要它們可能會很好,但我們不確定。重寫對象方法不錯的編程習慣?
0
A
回答
7
除非您需要equals
和hashCode
的不同實施方案,否則不要覆蓋它們。如JavaDoc,Object
版本中所述...
...實現對物體上最可能的等價關係;即,對於任何非
null
參考值x
和y
,此方法返回true
當且僅當x
和y
指代相同的對象(x == y
具有值true
)。
如果您需要equals
不同的含義你只覆蓋它們(如,說,String
一樣)。 (如果您覆蓋其中一個,則幾乎總是需要覆蓋另一個。)
1
我會毫不猶豫地重寫一些方法,只是因爲你「可能」需要它們。讓需要出現,然後解決問題。提供了這些方法的默認實現,並且可以與集合一起使用,添加您自己的實現可能會產生問題。
2
不是。只有當你需要它們時纔去做。
1
即使不直接調用它,某些方法也會使用equals
。
只有當您需要時,您才應該這樣做。 (如果Object.equals()
和Object.hashcode()
沒有做什麼需要爲您的類)
1
你應該重寫equals()
和hashCode()
當你需要和你應該總是覆蓋toString()
0
不要忽略它,除非你真的需要它。當您嘗試將這些對象用作HashMap
的密鑰時,您確實需要重寫這些方法。
2
編碼一些你知道你不需要的東西沒有意義。
OTOH,equals和hashCode對覆蓋非常有用,您可以很容易地使用它們而不會意識到,例如,
- 把物體在
HashMap
- 測試相等間接例如與單元測試
assertEquals
- 測試對象是否存在一個集合中
基本上,如果你的對象有值語義,作爲以某種方式「數據」,而不是單身,那麼你可能會由於以上一個或多個原因,最終必須覆蓋等於。
相關問題
- 1. 習慣的方法
- 2. 習慣的方法
- 3. 好的編程習慣?
- 4. 編程習慣:鑄字陣反對
- 5. 好習慣?虛擬對象
- 6. 這是不好的編程習慣
- 7. 這是不好的編程習慣嗎?
- 8. 創建Objective-C對象的最佳編程習慣是什麼?
- 9. 從封閉ArrayController刪除對象的習慣方法
- 10. 在Haskell中編寫數學表達式的習慣性寫法
- 11. 爲什麼重寫window.onresize壞習慣?
- 12. 不錯的編程習慣 - 哪個更高效?
- 13. Java - 這是不錯的編程習慣嗎?
- 14. 引用對象的好習慣
- 15. 糟糕的編程習慣使方法依賴於另一種方法?
- 16. 良好的編程習慣了回發
- 17. 在Haskell中編寫firstRightOrLefts的習慣用法?
- 18. 編譯器錯誤說我不重寫抽象方法keyReleased
- 19. 習慣的方法反應,終極版
- 20. PHP OOP訪問方法的好習慣?
- 21. 保護方法的好習慣
- 22. 調用存取方法的好習慣?
- 23. 這是不好的編碼習慣嗎?
- 24. 不是抽象的,不重寫抽象方法錯誤
- 25. 錯誤:類不是抽象的,不重寫抽象方法
- 26. AsyncTask裏面的靜態方法 - 良好的編碼習慣?
- 27. 是PHP返回錯誤對象的壞習慣嗎?
- 28. 重寫compareTo方法的對象類
- 29. Objective-C對象可以作爲它自己的代表嗎?這是不錯的編程習慣嗎?
- 30. 用於在類中生成新對象的習慣用法