我想使用一个数据类,该数据类的属性在构造函数中具有基于另一个构造函数参数的默认值。如果我使用普通(非数据)类,它的工作方式完全符合我的要求:
import java.time.Clock
import java.time.Instant
class MyObject(
clock: Clock = Clock.systemUTC(),
val name: String,
val timeCreated: Instant = clock.instant()
)
fun main() {
val a = MyObject(name = "Fred")
println(a.timeCreated)
}
但如果我尝试使其成为data class
,它就不会编译:
Primary constructor of data class must only have property ('val' / 'var') parameters.
我不希望该clock
参数成为属性,因为它仅用于测试。但我确实希望该类成为data class
具有自动生成的toString
和copy
其他附加功能的一个类。我该怎么办?
只需添加一个辅助构造函数:
注意参数
clock
应该在之后name
,否则调用构造函数时需要指定参数名称。