java - lombok @Builder 与构造函数

标签 java builder lombok

谁能给我解释一下使用 lombok @Builder 创建对象而不是构造函数调用的优势?

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

MyObject o2 = new MyObject(1, "name")

这只是提高知名度的问题吗?

最佳答案

考虑:

Order order = new Order("Alan", "Smith", 2, 6, "Susan", "Smith");

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

现在有一个构建器:

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

它比较冗长,但读起来很清楚,而且在 IDE 的帮助下也很容易编写。编写构建器本身有点繁琐,但像 Lombok 这样的代码生成工具可以帮助解决这个问题。

有些人争辩说,如果您的代码需要构建器来提高可读性,那就是暴露了其他味道。您使用了太多基本类型;您在一个类(class)中放置了太多字段。例如,考虑:

Order order = new Order(
     new Originator("Alan", "Smith"),
     new ItemSet(new Item(2), 6),
     new Recipient("Susan", "Smith"));

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

关于java - lombok @Builder 与构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47354325/

相关文章:

java - 与 Grails 类似的 Web 框架,但使用 Java 而不是 Groovy?

java - 更改 Eclipse 窗口生成器下的 Java 程序图标

java - 在复制构造函数中使用直接字段访问而不是 getter 会导致空指针异常

java - Spring数据cassandra : No property builder found on class User to bind constructor to

spring - 如何在带有 Lombok 的类构造函数中使用 @Lazy 注释?

java - 如何使用 lombok @Builder 来存储不同的值?

JavaFX 参数化可编辑表格 View

JavaFx Combobox 延迟加载图像

java - Android - 更改所有 Android 版本的应用程序语言

iphone - 设计 View 从 Interface Builder 中消失