Java 如何对不同长度的输入使用生成器?
我正在使用Builderpattern构建并返回一个对象。根据如何调用方法的可用参数的数量,有一个已定义的顺序。目前我使用if-else块。是否有Java8或更高版本的替代方案来动态使用构建器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)
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我不知道你的确切意思。你能不能加上一两句关于我如何实施你的方法的话,或者给我一个合适的搜索词,这样我就可以自己用谷歌搜索它了?看看,这里有一些我想到的例子。非常感谢你,我真是太想念树木了。非常感谢你。