【问题标题】:How are secondary kotlin constructor variables passed in?辅助 kotlin 构造函数变量是如何传入的?
【发布时间】:2018-02-10 05:32:24
【问题描述】:

我正在为Kotlingigasecond 练习练习寻找解决方案: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)
}

【问题讨论】:

    标签: constructor kotlin


    【解决方案1】:

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

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

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

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


    来自关于secondary constructors的官方文档:

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

    这就是这里发生的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-12
      • 1970-01-01
      相关资源
      最近更新 更多