簡體   English   中英

在Java中創建對象時重載構造函數VS傳遞null

[英]Overloading constructor VS passing null while createing objects in Java

如果一個類在對象創建過程中需要多個字段信息並且它允許更少的信息。比我們有兩個選擇
1. 提供多個構造函數,或
2. 允許客戶端在創建對象時傳遞空參數。

其中,這是最佳實踐。 前任:
情況1:

public class Test {
    Test(A ob1,B ob2, C ob3){

    }
    Test(A ob1,B ob2){
            this(ob1, ob2, null);    
    }
    public static void main(String args[]){
        Test ob = new Test(new A(),new B());
    }
}

案例 2:

public class Test {
    Test(A ob1,B ob2, C ob3){

    }
    public static void main(String args[]){
        Test ob = new Test(new A(),new B(), null);
    }
}

我在同一個類中使用了 main 方法。 請在其他類中考慮這些主要方法。

使用多個構造函數是最好的。 許多標准 API 庫也實現了它。 此外,它使代碼松散耦合,而不是通過傳遞顯式“空”值來創建對象的好習慣。

情況 2 增加了高耦合的機會。

除了主要問題:閱讀更多: 在 Java 中處理多個構造函數的最佳方法

編輯:

使用命名工廠方法來構造對象是更好的做法,因為它們比具有多個構造函數更能自我記錄。 [有效 Java 由 Joshua Bloch 編寫]

情況一是偏愛。 這是在具有此選項的 API 中的大多數類中完成的。 這也意味着您可以根據需要在未來版本中更改第二個/第三個/...參數,而無需升級對構造函數的調用。

案例 3,提供一個方法來創建對象。

public class A {

  public static A create(B b) {
     A a = new A();
       a.setB(b);
  }

  public static A create(B b, C c) {
     A a = create(b);
       a.setC(c);

   return a;
  }

  private A() {} 

  public void setB(B);
  public void setC(C);

} 

構造函數應該能夠創建對象以防止內存泄漏。 里面的參數越少,出現 NullPointerException 的情況就越少。 提供像所介紹的工廠方法將降低這種風險並改善對對象的控制。

第一種情況是最好的。 為什么要避免使用多個構造函數? 除非你不打電話給他們,否則他們不會打擾你。 擁有不同的構造函數還增加了代碼的可讀性,因為實例化對象需要哪些參數是很清楚的,與 null 情況相反,您總是必須查看哪些參數是不需要的。

不輸入空值,因此您可能會產生未來的錯誤和懷疑

 new Thing( myA, null, null)

這里不清楚意圖是傳遞一個空 B 和一個空 C,

 new Thing (myA)

是明確的

暫無
暫無

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

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