代码之家  ›  专栏  ›  技术社区  ›  Ryanqy

为什么每个二级构造函数都需要委托给Kotlin中的主构造函数?

  •  1
  • Ryanqy  · 技术社区  · 6 年前

    作为Kotlin参考 Classes and Inheritance 说,

    如果该类有一个主构造函数,则每个辅助构造函数都需要通过另一个辅助构造函数直接或间接委托给主构造函数。

    我不明白为什么Kotlin二级构造函数需要这样做?它能防止Java中的一些问题吗?

    1 回复  |  直到 6 年前
        1
  •  3
  •   zsmb13    6 年前

    这是因为 init

    以本课程为例:

    class Rectangle(val width: Int, val height: Int) {
    
        constructor(size: Int) : this(size, size)
    
        val area = width * height
    
        init {
            println("New rectangle, $width x $height")
        }
    
    }
    

    area 财产和 块使用主构造函数参数-如果辅助构造函数没有调用主构造函数,则无法执行初始化。

    width height

    当然,如果没有主构造函数(这在Android视图中很常见),那么在一个类中可以有多个辅助构造函数——如果有的话,执行初始化逻辑会比较困难。