У меня есть простой класс Kotlin:
data class ValveSpan(val begin:Duration, val end:Duration, val key:String):Comparable<ValveSpan> {
...
}
Поскольку это класс данных, я должен иметь основной конструктор с одним или несколькими значениями в нем.И это хорошо, мне нравится его краткое выражение.
Но когда я хочу создать вспомогательный конструктор, который заполняет его из объекта, похожего на doc (похожего на JSON), он становится странным:
constructor(doc:TSON):this(doc["begin"].duration!!, doc["end"].duration!!, doc["valves"].sequence!!.first()!!.string!!) {
// do nothing here, because, uh, I had to do it all in the delegated primary????
}
По сути, цель вторичного конструктора - взять входные данные, вычислить некоторые значения для первичного конструктора, а затем вызвать первичный с этими значениями.Но, похоже, я должен сделать их встроенными в основной конструктор.Который по мере того, как происхождение становится все более сложным, становится все более сложным.Мне бы очень хотелось написать что-то вроде:
constructor(doc:TSON) {
var sanitizedBegin = doc["begin"].duration ?: 0.minutes
var sanitizedEnd = doc["end"].duration ?: 0.minutes
var sanitizedKey = doc["valves"].sequence?.firstOrNull()?.string ?: ""
primaryConstructor(sanitizedBegin, sanitizedEnd, sanitizedKey)
}
Нет ли способа делегировать первичному конструктору без необходимости выполнять все встроенные вычисления моста?