有人能向我解释使用 lombok
@Builder
创建对象相对于构造函数调用的优势吗?
MyObject o1 = MyObject.builder()
.id(1)
.name("name")
.build();
MyObject o2 = new MyObject(1, "name")
这只是一个更好的可见性的问题吗?
有人能向我解释使用 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的帮助下编写也很容易。撰写builder本身可能会有些烦人,但是像Lombok这样的代码生成工具可以提供帮助。
有人认为,如果你的代码需要使用builder才能读懂,那就暴露了其他问题。你使用了太多基本类型;你把太多字段放在一个类中。例如,请考虑以下内容:
Order order = new Order(
new Originator("Alan", "Smith"),
new ItemSet(new Item(2), 6),
new Recipient("Susan", "Smith"));
由于我们正在使用更多具有单一职责的类和较少的字段,因此该内容可以自我解释,而无需使用构建器。
Order order = new Order { firstName = “A”, lastName = “B”, }
? - Nguyễn Văn Phong这不是 lombok 特有的功能,而是称为建造者模式。
假设您有一个包含20个参数的类,其中10个是可选的。你可以创建许多构造函数来处理这个逻辑,或者创建一个包含所有这些参数的构造函数,并在某些地方传递 null。使用建造者模式难道不更简单吗?
@Builder
并不是您答案中提到的“四人帮”构建模式。建造者模式由指挥者和具体建造者组成,与 @Builder
提供的内容不同。 - Marc