如何传入辅助kotlin构造函数变量?

Low*_*ong 1 constructor kotlin

我正在研究gigasecond锻炼运动的解决方案Kotlin:http://exercism.io/exercises/kotlin/gigasecond/readme .我可以理解它是如何需要两个两个构造,因为LocalDateLocalDateTime参数创建的类时传入.我不明白的是下面的二级类构造变量是如何在类中传入和使用的.似乎只有在LocalDateTime传入参数时才会进行计算,因为只能使用计算dobWithTime.这里发生了什么魔术?

data class Gigasecond(val dobWithTime: LocalDateTime) {
    constructor(dateOfBirth: LocalDate) : this(dateOfBirth.atStartOfDay())

    val date: LocalDateTime = dobWithTime.plusSeconds(1000000000)
}
Run Code Online (Sandbox Code Playgroud)

zsm*_*b13 5

辅助构造函数只是使用: this()语法将调用转发给主构造函数,同时LocalDateTimeLocalDate它作为参数接收的对象创建所需的对象.

您可以将辅助构造函数视为执行以下操作的函数:

fun createGigaSecond(dateOfBirth: LocalDate): Gigasecond {
    return Gigasecond(dateOfBirth.atStartOfDay())
}
Run Code Online (Sandbox Code Playgroud)

除了它使用通常的构造函数语法,因此它可以被调用Gigasecond(dataOfBirth)而不是createGigaSecond(dateOfBirth).


从关于辅助构造函数的官方文档:

如果类具有主构造函数,则每个辅助构造函数需要直接或间接通过另一个辅助构造函数委托给主构造函数.使用this关键字完成对同一个类的另一个构造函数的委派.

这就是这里发生的事情.