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

时间:2018-02-10 05:32:25

标签: constructor kotlin

我正在研究gigasecond Kotlin的{​​{1}}锻炼练习的解决方案: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)
}

1 个答案:

答案 0 :(得分:5)

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

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

fun createGigaSecond(dateOfBirth: LocalDate): Gigasecond {
    return Gigasecond(dateOfBirth.atStartOfDay())
}

除非它使用通常的构造函数语法,因此可以将其称为Gigasecond(dataOfBirth)而不是createGigaSecond(dateOfBirth)

关于secondary constructors的官方文档:

  

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

这就是这里发生的事情。