lombok @Builder vs构造函数

Vit*_*lii 6 java builder lombok

我对java很新.有人可以解释一下使用lombok @Builder创建对象而不是构造函数调用的优点吗?

MyObject o1 = MyObject.builder()
              .id(1)
              .name("name")
              .build();

MyObject o2 = new MyObject(1, "name")
Run Code Online (Sandbox Code Playgroud)

这只是一个更好的可见度问题吗?

Sha*_*dov 7

这不是一个特定于lombok的功能,这称为构建器模式.

想象一下,你有一个包含20个参数的类,其中10个是可选的.您可以以某种方式使大量构造函数处理此逻辑,或者使用所有这些参数创建构造函数并在某些位置传递null.构建器模式不简单吗?


sli*_*lim 7

考虑:

Order order = new Order("Alan", "Smith", 2, 6, "Susan", "Smith");
Run Code Online (Sandbox Code Playgroud)

参数是什么意思?我们必须查看构造函数规范才能找到答案.

现在有了一个建设者:

Order order = Order.builder()
    .originatorFirstName("Alan")
    .originatorLastName("Smith")
    .lineItemNumber(2)
    .quantity(6)
    .recipientFirstName("Susan")
    .recipientLastName("Smith")
    .build();
Run Code Online (Sandbox Code Playgroud)

它更加冗长,但阅读非常清楚,并且在IDE的帮助下,它也很容易编写.构建器本身是一件苦差事,但像Lombok这样的代码生成工具对此有所帮助.

有些人认为,如果你的代码需要构建器可读,那就暴露出其他气味.你使用的基本类型太多了; 你在一个班级里放了太多的田地.例如,考虑:

Order order = new Order(
     new Originator("Alan", "Smith"),
     new ItemSet(new Item(2), 6),
     new Recipient("Susan", "Smith"));
Run Code Online (Sandbox Code Playgroud)

......不使用构建器,这是不言自明的,因为我们使用的是更多具有单一职责和更少字段的类.