Kotlin init 调用顺序详解

在java中,构造函数是可以有多个的。而Kotlin稍微有点不一样,它会有主级函数,次级函数,当然java也能实现Kotlin的主级次级函数效果。

而我们要说的init就会跟构造函数有密切关系。让我们直接看结果

调用顺序:主级函数>init>次级函数

如果类有主级函数

代码如下:

// 主级函数
class CustomView(context: Context, attrs: AttributeSet?) :
    FrameLayout(context, attrs) {

    // 次级函数
    constructor(context: Context) : this(context, null)

    init {
        Log.d("CustomView",attrs.toString())
    }
}

我们会发现,在init里面可以直接使用主级函数的attrs,那是因为在调用init之前,主机函数已经调用了

如果类没有主级函数

代码

class CustomView2 : FrameLayout {

    constructor(context: Context) : this(context, null)
    constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)
    constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
        context,
        attrs,
        defStyleAttr
    ) {
        Log.d("CustomView2", "顺序2:constructor")
        initCustom(attrs)
    }

    init {
        Log.d("CustomView2", "顺序1:init")
    }

    private fun initCustom(attrs: AttributeSet?) {
        Log.d("CustomView2", "顺序3:initCustom" + attrs.toString())
    }

}

结果如下:
CustomView2: 顺序1
CustomView2: 顺序2
CustomView2: 顺序3

我们可以看到,如果没有主级函数,就会先调用init,然后才到次级函数,这个时候我们就需要写自己定义的初始化方法了。

喜欢就点个收藏

一个非常丰富的开源库,如果你需要相册、录制、录音等操作,那么这个也许对你有一定的帮助:
https://www.jianshu.com/p/8a0accffd0e1

Kotlin Demo配合文章,用最简单的例子入门Kotlin:
https://www.jianshu.com/p/8a0accffd0e1

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前提概念:kotlin中主级函数、次级函数概念理解调用顺序:主级函数>init>次级函数 详细文章传送门:http...
    桃先森_阅读 2,725评论 0 2
  • 例子 注释1:主构造函数,数量<=1,如果都没有定义主、次构造函数,那么就会有一个默认无参的构造函数可以调用; 注...
    杨0612阅读 5,913评论 3 4
  • Kotlin中的类与继承 Java三大特性继承、多态、封装Java学习中首先学习的是类的构建,那么必然要学习构造方...
    一只胖Wa牛阅读 239评论 0 2
  • 在 Kotlin 中的变量、常量以及注释多多少少和 Java 语言是有着不同之处的。下面详细的介绍 Kotlin ...
    驰同学阅读 1,167评论 0 2
  • 如果描述的类型不是基本类型怎么办? 任何复杂的数据类型都是由基本的数据类型构成的 面向对象 使用基本数据类型描述复...
    JunChow520阅读 2,295评论 0 1

友情链接更多精彩内容