例如,我有一个带有5个参数的生成器的类,而不是我手动选择并填充参数,而是有一种方法可以告诉Intellij做到这一点:
MyClass myClass = MyClass.builder()
.param1()
.param2()
.param3()
.param4()
.param5()
.build();
然后我可以自己填写参数。确保我没有错过任何机会很方便。
另外,我可以设置自动完成选项以使其在课程中出现的顺序排序吗?
答案 0 :(得分:1)
即使有这样的插件,我相信它也不会真正帮助您(因为您仍然需要手动单击每个方法调用并提供参数),并且绝对不应该使用IDE来保护您避免未设置所有必需参数
在这种情况下,您可以将所有强制性参数放入构造函数中,也可以在build
方法内提供验证。像
public MyClass build() {
if(param1 == null) {
// handle param1 null value
}
if(param2 == null) {
// etc
}
...
}
答案 1 :(得分:0)
为确保没有遗漏任何参数,可以对构建器模式使用特定的变体。我称之为“命名参数”:
public final class MyClassBuilder {
public static Param2 param1(String param1) {
return param2 -> param3 -> param4 -> param5 -> new MyClass(
param1, param2, param3, param4, param5
);
}
public interface Param2 {
Param3 param2(String value);
}
public interface Param3 {
Param4 param3(int value);
}
public interface Param4 {
Param5 param4(boolean value);
}
public interface Param5 {
MyClass param5(Object value);
}
}
用法如下:
MyClass m = MyClassBuilder.param1("1")
.param2("2")
.param3(3)
.param4(false)
.param5(new Object());
使用这种模式,编译器(和任何IDE)将强制执行参数的顺序,并调用所有参数,因为任何中间状态都不允许获得结果。它也不需要任何额外的build()方法,因为最后一个参数已经可以返回结果了。
还有更多的编码,但是我计划在我的项目中为它创建一个代码生成器:https://github.com/c0stra/fluent-api-generator