让我们想象一下,我们有两个属性的数据类,出于某些原因,我们需要二级构造函数。问题是,我需要在主构造函数调用中重新计算每个参数,而不是使用raw.split("_")
缓存的值。
data class Id(
val arg1: String,
val arg2: String
) {
constructor(raw: String) : this(raw.split("_")[0], raw.split("_")[1])
}
我可以在Java中做到这一点,但是我如何在Kotlin中做到这一点呢?
发布于 2020-01-28 17:03:14
你可以这样做:
data class Id(
val arg1: String,
val arg2: String
) {
private constructor(splitted: List<String>) : this(splitted[0], splitted[1])
constructor(raw: String) : this(raw.split("_"))
}
这是解决问题的好方法,也是一种惯用的方法。由于所有辅助构造函数都必须委托给主构造函数(数据类总是有主构造函数),所以不能在构造函数体中执行所需的操作。在Java中,这是因为在语言级别上没有主构造函数和数据类--在Kotlin中,如果删除data
修饰符并将属性移出构造函数,也可以像在Java中那样做,但这是一种非常糟糕的方法。
https://stackoverflow.com/questions/59959101
复制