使用 lombok 从现有对象构建对象

新手上路,请多包涵

假设我有一个 lombok 注释类

@Builder
class Band {
   String name;
   String type;
}

我知道我能做到:

 Band rollingStones = Band.builder().name("Rolling Stones").type("Rock Band").build();

有没有一种简单的方法可以使用现有对象作为模板并更改其中一个属性来创建 Foo 的对象?

就像是:

 Band nirvana = Band.builder(rollingStones).name("Nirvana");

我在 lombok 文档中找不到这个。

原文由 Mustafa 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 522
2 个回答

您可以使用 toBuilder 参数为实例提供 toBuilder() 方法。

 @Builder(toBuilder=true)
class Foo {
   int x;
   ...
}

Foo f0 = Foo.builder().build();
Foo f1 = f0.toBuilder().x(42).build();

文档中

如果使用@Builder 生成构建器来生成您自己的类的实例(这种情况总是如此,除非将@Builder 添加到不返回您自己的类型的方法中),您也可以使用@Builder(toBuilder = true) 来生成您的类中的一个实例方法称为 toBuilder();它创建一个新的构建器,该构建器以该实例的所有值开始。

免责声明:我是一名龙目岛开发者。

原文由 Roel Spilker 发布,翻译遵循 CC BY-SA 3.0 许可协议

有没有一种简单的方法可以使用现有对象作为模板并更改 其中一个 属性来创建 Foo 的对象? ( _强调我的_)

如果您真的想更改单个属性,那么有一种更好、更有效的方法:

 @With
class Band {
   String name;
   String type;
}

Band nirvana = rollingStones.withName("Nirvana");

凋灵不会产生垃圾,但它只能改变一个领域。要更改许多字段,您可以使用

withA(a).withB(b).withC(c)....

并产生成吨的垃圾(所有中间结果),但比 toBuilder 更高效、更自然。

注意:旧版本的 lombok 使用了 @Wither 注释。请参阅 文档开头

原文由 maaartinus 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题