簡體   English   中英

如何使用 Builder 進行不同長度的輸入?

[英]How to use a Builder for different length of input?

我正在使用 Builder(pattern) 來構建並返回 object。 根據可用 arguments 的數量,定義了如何調用方法的順序。 目前我使用 if-else 塊。 是否有 java 8 或更高版本來動態使用構建器?

public Task createTask(String[] params){
    if(params.length < 1){
       throw new IllegalArgumentException();
    }
    else if(params.length == 1){
        return new TaskBuilder().setOne(params[0]).build();
    }
    else if(params.length == 2){
        return new TaskBuilder().setOne(params[0])
                                .setTwo(params[1]).build();
    }
    else if(params.length == 3){
        return new TaskBuilder().setOne(params[0])
                                .setTwo(params[1])
                                .setThree(params[2]).build();
    }
    else if(params.length == 4){
        return new TaskBuilder().setOne(params[0])
                                .setTwo(params[1])
                                .setThree(params[2])
                                .setFour(params[3]).build();

    }
    else if(params.length == 5){
        return new TaskBuilder().setOne(params[0])
                                .setTwo(params[1])
                                .setThree(params[2])
                                .setFour(params[3])
                                .setFive(params[4]).build();

    }
    else{
        throw new IllegalArgumentException();
    }

}

你真的不需要像 function 參考這樣的花哨的東西。 您所要做的就是中斷構建器調用:

public Task createTask(String[] params){
    if (params.length < 1 || params.length > 5) {
        throw new IllegalArgumentException();
    }

    TaskBuilder builder = new TaskBuilder();

    if (params.length >= 1) { builder = builder.setOne(params[0]); }
    if (params.length >= 2) { builder = builder.setTwo(params[1]); }
    if (params.length >= 3) { builder = builder.setThree(params[2]); }
    if (params.length >= 4) { builder = builder.setFour(params[3]); }
    if (params.length >= 5) { builder = builder.setFive(params[4]); }
    
    return builder.build();
}

暫無
暫無

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

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