美文网首页
Kotlin-构造函数(3)- init代码块

Kotlin-构造函数(3)- init代码块

作者: 杨0612 | 来源:发表于2021-06-19 13:35 被阅读0次
场景,通过Person("yang", 30)创建实体,doSomething方法是否会执行呢?
  // 定义
    class Person  {
        private var name: String? = null
        private var age: Int? = null
        constructor(name: String, age: Int) {
            this.name = name
            this.age = age
        }
        init {
            if (!this.name.isNullOrEmpty()) {
                doSomething()
            }
            if (this.age != null) {
                doSomething()
            }
        }
    }
//调用Person("yang", 30)
  • doSomething方法不会被执行。是否跟大家像的有点不一样呢?反正是我搞错了的。
    如果你答对了,以下内容可以跳过了,答错了的可以继续往下看。
    这个问题的关键在于对init代码块执行顺序的理解,执行顺序:主构造函数->init代码块->次构造函数,次构造函数是晚于init代码块执行的,constructor(name: String, age: Int)是次构造函数,而非主构造函数,只有定义在类名后面的才是主构造函数。当执行到init代码块的时候,属性是没有值的。

如果希望doSomething函数得到执行,可以把构造函数定义为主构造函数。

    class Person constructor(val name: String?, val age: Int?) {
        init {
            if (!this.name.isNullOrEmpty()) {
                doSomething()
            }
            if (this.age != null) {
                doSomething()
            }
        }
    }
总结:
  • init代码块跟主构造函数搭配使用的,或者做一些跟次构造函数无强相关的处理。

以上分析有不对的地方,请指出,互相学习,谢谢哦!

相关文章

网友评论

      本文标题:Kotlin-构造函数(3)- init代码块

      本文链接:https://www.haomeiwen.com/subject/rzgryltx.html