Lombok Builders是否使用Reflection?
还是它还预先编译了必要的代码?
答案 0 :(得分:4)
The official site非常清楚@Builder
如何运作:
@Builder
可以放在类,构造函数或方法上。虽然“在类上”和“在构造函数上”模式是最常见的用例,但@Builder
最容易用“方法”用例来解释。使用
@Builder
注释的方法(从现在开始称为 target )会导致生成以下7件事:
- 一个名为
FooBuilder
的内部静态类,其类型参数与静态方法相同(称为 builder )。- 在构建器中:目标的每个参数的一个私有非静态非最终字段。
- 在构建器:包私有空args空构造函数。
- 在构建器中:目标的每个参数的类似“setter”的方法:它与该参数的名称相同且名称相同。它返回构建器本身,以便可以链接setter调用,如上例所示。
- 在构建器中:调用方法的
build()
方法,传入每个字段。它返回 target 返回的相同类型。- 在构建器:明智的
toString()
实施。- 在包含目标的类中:
builder()
方法,该方法会创建构建器的新实例。
例如,它可能看起来像这样:
public static class FooBuilder {
private String abc;
private String def;
FooBuilder() {}
public FooBuilder abc(String abc) {
this.abc = abc;
return this;
}
public FooBuilder def(String def) {
this.def = def;
return this;
}
public Foo build() {
return new Foo(abc, def);
}
@Override
public String toString() {
return "FooBuilder{abc: " + abc + ", def: " + def + "}";
}
}
答案 1 :(得分:3)
由于Lombok使用类代码生成,因此肯定没有任何反映。它适用于AST(抽象语法树)级别,即它与解析后的源一起工作,介于源代码和字节码之间。
Lombok的一部分是delombok,它向您展示了生成的代码。