具有2个以上构造函数的Kotlin中的init块

时间:2019-03-19 17:03:20

标签: android kotlin

发现init {}块在辅助构造函数之前执行。

所以基本上我有两个构造函数(primarysecondary)。 Primary仅用于初始化简单视图。次要的-尝试用数据填充editViews。在secondary构造函数之后,我预计将执行init块。

有没有办法做到这一点?

class EditView(val context: Context){
    constructor(context: Context, title: String): this(context) {
        // Executes after init block
    }

    init {
        // Ran before secondary constructor
        // Code for initializing my view
    }
}

1 个答案:

答案 0 :(得分:3)

您不能这样做,因为init块本质上是主构造函数的主体(所有内联属性初始化器也是如此)。这意味着它将在您使用this(context)从辅助对象调用主对象时运行,只有这样您才能在辅助构造函数中运行代码。

首先运行主构造函数,以确保您的实例在主构造函数的主体运行时已经处于有效的构造状态-例如,不可为空的属性具有一个非空值,等等。