Java 如何对不同长度的输入使用生成器?

Java 如何对不同长度的输入使用生成器?,java,builder-pattern,Java,Builder Pattern,我正在使用Builderpattern构建并返回一个对象。根据如何调用方法的可用参数的数量,有一个已定义的顺序。目前我使用if-else块。是否有Java8或更高版本的替代方案来动态使用构建器 public Task createTask(String[] params){ if(params.length < 1){ throw new IllegalArgumentException(); } else if(params.length == 1)

我正在使用Builderpattern构建并返回一个对象。根据如何调用方法的可用参数的数量,有一个已定义的顺序。目前我使用if-else块。是否有Java8或更高版本的替代方案来动态使用构建器

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();
    }

}

你真的不需要像函数引用这样花哨的东西。您所要做的就是打断生成器的调用:

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();
}

你真的不需要像函数引用这样花哨的东西。您所要做的就是打断生成器的调用:

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();
}

从理论上讲,你可以有一个对setOne、setTwo等的函数引用数组,然后在上面迭代。@Taschi我不知道你的确切意思。你能不能加上一两句关于我如何实现你的方法的话,或者给我一个合适的搜索词,这样我就可以自己用谷歌搜索它了?看看,这里有一些我想到的例子。理论上你可以有一系列对setOne、setTwo等的函数引用,然后再重复一遍。@Taschi我不知道你的确切意思。你能不能加上一两句关于我如何实施你的方法的话,或者给我一个合适的搜索词,这样我就可以自己用谷歌搜索它了?看看,这里有一些我想到的例子。非常感谢你,我真是太想念树木了。非常感谢你。