簡體   English   中英

我們應該總是在類中使用零參數構造函數嗎?

[英]Should we always have a zero-argument constructor in a Class?

每個Java類都應該有一個零參數構造函數嗎?

沒有

如果在沒有向構造函數提供任何信息的情況下創建類的實例是沒有意義的,那么您不需要零參數構造函數。

一個很好的例子是java.awt.Color類,其所有ctors都被論證。

不,始終創建零參數構造函數沒有意義,以下場景是提供至少一個參數構造函數的示例

  1. 類本身無法創建的必需依賴項。
  2. 屬性沒有任何有意義的默認值。

您希望擁有/需要零參數構造函數的情況:

  1. 您希望遵守JavaBeans規范(對簡單數據對象有意義)。
  2. 可以使用有意義的默認值初始化所有字段。
  3. 您想使用需要它的框架。

在我看來,有一個零參數構造函數的錯誤論據是一長串的論點。 為此,有一個比接受初始化創建后未處於安全狀態的對象更好的解決方案:

  1. 使用Builder模式。
  2. 提供專用容器對象以通過構造函數配置實例。
  3. 提供多個構造函數,其中每個構造函數的基本參數是不能分配默認值的必需參數。

正如Andy Thomas-Cramer已經指出的那樣,甚至是不可能的:

class NeedsToBeImmutable {
    // For a class to be immutable, its reachable state
    // MUST be reached through a final field
    private final String stuff;

    //!!Compile error!!
    public NeedsToBeImmutable(){}

    public NeedsToBeImmutable(String stuff){
    this.stuff = stuff;
    }
    //getters...
}

不。但也有例外。 例如,如果您希望您的類只包含靜態util方法或單例類或只包含常量的類,那么您應該創建一個沒有參數的私有構造函數 ,以防止它被顯式實例化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM