第4條 通過私有構造器強化不可例項化的能力

2021-08-21 07:08:59 字數 672 閱讀 2311

對只有靜態方法和域的類,主要用於把基本型別的值或資料型別上的相關方法組織起來(math,arrays),可以通過collections的方法把實現特定介面的物件上的驚天方法組織起來,可以利用這種類把final類上的方法組織起來,以取代擴充套件該類的做法。此工具類是不希望被例項化的,例項化對他麼有任何意義。然後我們如果不提供構造器,jvm會自己提供,那還是會被例項化,那麼我們只要在類中提供乙個私有的構造器就可以了,並新增注釋說明。 這樣帶來的問題是不能子類化,因為子類要求要求super父類的建構函式。

場景:在建立工具類的時候,大部分是無需例項化的,例項化對它們沒有意義。在這種情況下,建立的類,要確保它是不可以例項化的。

存在問題:

在建立不可例項化的類時,雖然沒有定義構造器。但是,客戶端在使用該類的時候,依然可以例項化它。客戶端,可以繼承該類,通過例項化其子類來實現例項化;客戶端可以呼叫預設的構造器來例項化該類。

要避免這個問題,使用的方式是,定義乙個私有的構造器:

public

class utilityclass

}

新增 throw new assertionerror(),是避免在utilityclass例項化utilityclass類。

因為有了私有的無參構造器,這樣客戶端就沒有辦法呼叫預設構造器來例項化該類;也避免了繼承的子類被例項化的問題。

第4條 通過私有構造器強化不可例項化的能力

有時候可能只需要編寫包含靜態方法和靜態域的類。這些類的名聲很不好,因為有些人再物件導向的語言中濫用這些類來編寫過程化的程式。儘管如此,他們也確實有他們特有的用處。我們可以利用這種類,把基本型別的值或者陣列型別上的相關方法組織起來,也可以把實現特定介面上的靜態方法組織起來,還可以利用這種類把final...

第4條 通過私有構造器來強化不可例項化能力

像有些類裡面可能只包含靜態方法 屬性和靜態域的類時,而在缺少顯示的構造器的時候,編譯器會提供乙個無參的預設構造器,由於例項化它們並沒有任何意義,所以顯然沒有必要,這時候我們可以提供乙個私有的構造器,這樣就不被例項化了,當然,我們最後在構造器中丟擲異常來進行說明下,或者加條注釋。public clas...

第4條 通過私有方法強化不可例項化的能力

有時候,會需要編寫一些只含有靜態域和靜態方法的類。例如工具類 utility class 這些類不需要被例項化,也不需要被繼承。因為例項化對他們並沒有什麼卵用。然而,在缺少顯式構造器的時候,編譯器會自動提供以個公有的無參的預設構造器。這樣,這個工具類和別的類就沒有區別了 可以例項化,可以被類繼承 為...