如何传递次kotlin构造函数variables?
我正在研究Kotlin
gigasecond锻炼练习的解决方案: http ://exercism.io/exercises/kotlin/gigasecond/readme。 我可以理解它如何需要两个两个构造函数,因为在创建类时传入LocalDate
和LocalDateTime
参数。 我不明白的是如何将下面的次级构造函数variables传入并在类中使用。 看来只有当传入LocalDateTime
参数时才会进行计算,因为只能使用dobWithTime
进行计算。 这里发生了什么魔术?
data class Gigasecond(val dobWithTime: LocalDateTime) { constructor(dateOfBirth: LocalDate) : this(dateOfBirth.atStartOfDay()) val date: LocalDateTime = dobWithTime.plusSeconds(1000000000) }
辅助构造函数只是使用: this()
语法将调用转发给主构造函数,同时从LocalDate
创建所需的LocalDateTime
对象作为其参数。
你可以把辅助构造函数看作是一个执行以下操作的函数:
fun createGigaSecond(dateOfBirth: LocalDate): Gigasecond { return Gigasecond(dateOfBirth.atStartOfDay()) }
除了它使用通常的构造函数语法,所以它可以被称为Gigasecond(dataOfBirth)
而不是createGigaSecond(dateOfBirth)
。
从关于二级构造函数的官方文档:
如果类具有主构造函数,则每个次构造函数都需要通过另一个辅助构造函数直接或间接地委托给主构造函数。 向同一类的另一个构造函数的委托使用
this
关键字完成。
这是在这里发生的事情。