可變類與不可變類

一、不可變類(immutable)緩存

    建立該類的實例後,該實例的屬性是不可改變的。this

若建立自定義的不可變類,可遵照以下規則:對象

①使用private和final修飾符來修飾該類的屬性;生命週期

②提供帶參構造器,用於根據傳入參數來初始化類裏的屬性;get

③僅爲該類的屬性設置getter方法,不設置setter方法,由於普通方法沒法修改final修飾的屬性;hash

④如有必要,重寫Object類中hashCode和equals方法。在equals方法根據關鍵屬性來作爲兩個對象相等的標準,除此以外,還應該保證兩個用equals方法判斷爲相等的對象的hashCode也相等。

二、可變類table

    該類的實例的屬性是可變的。變量

與可變類相比,不可變量類對象在整個生命週期中永遠處於初始化狀態,它的屬性不可改變。所以對不可變類的實例的控制將更簡單。引用

若是類中有引用類型,則要防止改變引用對象的屬性。例如,初始化時new,不用this.xxx = xxx; 返回該對象時new一個相同的對象返回,不能return this.xxx。(String的方法)程序

緩存實例的不可變類:

  不可變類的實例的狀態不可改變,能夠方便被多個對象共享。若程序常常須要使用相同的不可變類實例,則應該考慮緩存這種不可變類的實例。由於屢次建立相同對象沒意義,增長系統開銷。

相關文章
相關標籤/搜索