簡體   English   中英

Java中構造函數中的多個可選參數 - 構造函數的指數

[英]Multiple optional arguments in constructor in Java - exponential number of constructors

這是我遇到過幾次,但還沒有找到令人滿意的答案。 這看起來很愚蠢,但谷歌搜索了一段時間后,我無法想出一些好的東西。

假設我有一個包含20個實例變量的類,每個變量都是可選的(將被初始化或不被初始化)。

現在我希望我的構造函數處理所有的情況,如果有一些實例變量它很好,我可以創建具有不同簽名的構造函數,但是這里我有20個,所以我需要2 ^ 20 = 1,048,576個構造函數處理所有案件! 這似乎......不是最優,你不同意嗎?

所以,由於采用這種強力方法,我基本上必須構造2 ^ n個構造函數,其中n是實例變量的數量,我想找到更好的方法來實現它。

我已經看到了這個問題的幾個解決方案,但我相信它們都是關於數據的假設,但在我的情況下,這些變量中的每一個都可以初始化或不是隨機的,我在初始化之前無法知道。

我正在尋找一些我可以應用的設計模式或想法,以使我的代碼更加可維護(不用擔心我沒有創建1M +構造函數:)

謝謝。

將Bean模式與Builder結合使用。 YourObject在構造過程中不會有不一致的狀態,但它仍然需要20多個set操作,你可以使YourObject不可變(如果你想) - 但不是YourObjectBuilder。

public class YourObject {
    private Type field1;
    private Type field2;
    private Type field3;
    ...
    YourObject ( Type field1 , Type field2 , Type field3 ... ) { }
}

public class YourObjectBuilder {
    private Type field1;
    private Type field2;
    private Type field3;
    ...

    public YourObjectBuilder() {
    }

    public YourObject make ( ) {
         return new YourObject ( field1 , field2 , field3 ... ) ;
    }

    public void setField1(Type t) {
        field1 = t;
    }

   public void setField2(Type t) {
        field2 = t;
   }

    public void setField3(Type t) {
        field3 = t;
    }
    ...
}
public class YourObject {
    private Type field1;
    private Type field2;
    private Type field3;
    ...

    public YourObject() {
    }

    public void setField1(Type t) {
        field1 = t;
    }

   public void setField2(Type t) {
        field2 = t;
   }

    public void setField3(Type t) {
        field3 = t;
    }
    ...
}

暫無
暫無

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

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