例如,我有一个类的生成器有5个参数,而不是手动选择参数并填充它们,有没有方法告诉Intellij这样做:
MyClass myClass = MyClass.builder()
.param1()
.param2()
.param3()
.param4()
.param5()
.build();
然后我可以自己填写参数。确保我没有错过任何一个会很方便
或者,我可以将自动完成选项设置为按它们在类中出现的顺序排序吗?
即使有这样一个插件,我相信它也不会真正帮助你(因为你仍然需要手动点击每个方法调用并提供参数(,你绝对不应该使用IDE来保护你不设置所有强制性参数。
在这种情况下,您可以将所有强制参数放入构造函数,或者在build
方法内部提供验证。类似的东西
public MyClass build() {
if(param1 == null) {
// handle param1 null value
}
if(param2 == null) {
// etc
}
...
}
为了确保不会遗漏任何参数,可以在构建器模式上使用特定的变体。我称之为"命名参数":
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