Objects 通用方法

自己寫的類,一般要實現哪些方法?
  • equals, hashCode, toString, clone,finalize, 此外還有Comparable.compareTo方法
什么時候不用實現equals方法?
  • 類的每個實例本來就是唯一的
  • 該類不需要提供logical equality的測試
  • 超類已經覆蓋了equals方法,超類的行為適合于該類
  • 該類是私有或包私有,你確定該類的equals方法不會被invoked
覆蓋equals方法遵循的5條協議是哪些?
  • 反身性;對稱性;傳遞性;一致性;Non-nullity
有什么辦法對一個可實例化的類進行extend,并添加一個value component,同時保護equals協議?
  • 沒辦法
針對上一條的問題,能不能換個角度解決該問題?
  • 改用組合,而不用繼承
  • 可以利用類層次,即在抽象類的子類中添加value component,同時保護equals協議
覆蓋equals方法,有什么建議?
  • 當你必須要覆蓋equals方法時,再去覆蓋它
  • 覆蓋equals方法,要遵循上述5條協議
為什么當你覆蓋equals方法時,總是要覆蓋hashCode方法?
  • 覆蓋hashCode的通用協議:
1.假如equals方法沒被修改,在一個應用的執行中,重復多次調用hashCode方法,必須返回相同的值
2.equal objects must have equal hash codes
3.不equal objects,不要求hash codes不同
  • 根據覆蓋hashCode第2條通用協議,等值對象必須具有相等的hash codes,兩個等值對象如果不覆蓋hash codes,則其hash codes值不等,違反了該協議。所以覆蓋equals方法時,必須要覆蓋hashCode方法。
為什么總是要覆蓋toString方法
  • 原始的toString返回的字符串是:類名+@+十六進制的hashCode值
  • toString方法的協議:返回精簡,且人易讀的字符串
覆蓋clone方法,有哪些建議?
  • 盡量不要實現Cloneable接口,不要提供 clone方法
  • 對于數組的copy,建議使用clone方法
  • immutable classes 應該禁止提供clone方法
  • 對于object copy,推薦使用 copy constructor 或者 copy factory
依賴comparison的類有哪些?
  • TreeSet,TreeMap,Collections,Arrays,包含搜索和排序算法
一個類實現comparison的功能,有哪些方法?
  • 實現Comparable接口,重寫compareTo方法
  • 使用Comparator
  • java8中Comparator接口中的comparingInt和comparing等方法
實現compareTo方法時,需要注意什么?
  • 不要使用>和<以及 - 符號,要使用包裝的原始類型類中的compare方法或使用Comparator接口中的構造方法。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容