龙目岛建筑商是否使用反射?

时间:2017-06-14 11:41:29

标签: java reflection lombok

Lombok Builders是否使用Reflection?

还是它还预先编译了必要的代码?

2 个答案:

答案 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,它向您展示了生成的代码。