如何为具有许多不可变属性的 Kotlin 数据类创建构建器

Bri*_*ter 5 builder-pattern kotlin

我有一个 Kotlin 数据类,我正在使用许多不可变属性构建它,这些属性是从单独的 SQL 查询中获取的。如果我想使用构建器模式构造数据类,如何在不使这些属性可变的情况下执行此操作?

例如,而不是通过构建

var data = MyData(val1, val2, val3)
Run Code Online (Sandbox Code Playgroud)

我想用

builder.someVal(val1)
// compute val2
builder.someOtherVal(val2)
// ... 
var data = builder.build()
Run Code Online (Sandbox Code Playgroud)

同时仍然使用 Kotlin 的数据类功能和不可变属性。

Pel*_*cho 3

我不认为 Kotlin 有原生构建器。您始终可以计算所有值并在最后创建对象。

如果您仍然想使用构建器,则必须自己实现它。检查这个问题

  • 我目前正在像您所说的那样在最后创建对象,但是跟踪将传入的所有构造函数参数似乎是违反直觉的。本质上,我必须在数据类和在我构建数据类实例的代码块中。 (2认同)
  • @BrianVoter,但这也是构建器模型在 Java 中的工作方式。这些值位于构建器类中,并在创建时复制到数据类。 (2认同)