Kotlin(7) 匿名类

7 Kotlin 匿名类

对象表达式

通过对象表达式实现一个匿名内部类的对象用于方法的参数中:

hello.setOnClickListener(object : View.OnClickListener {
    override fun onClick(v: View?) {
        //To change body of created functions use File | Settings | File Templates.
    }
})

对象声明

Kotlin 使用 object 关键字来声明一个对象。

Kotlin 中我们可以方便的通过对象声明来获得一个单例。

object XXX {
    fun register()
}

引用该对象,我们直接使用其名称即可:

XXX.register()

伴生对象

类内部的对象声明可以用 companion 关键字标记,这样它就与外部类关联在一起,我们就可以直接通过外部类访问到对象的内部元素。

class MyClass {
    companion object Factory {
        fun create(): MyClass = MyClass()
    }
}

val instance = MyClass.create()   // 访问到对象的内部元素

注意:一个类里面只能声明一个内部关联对象,即关键字 companion 只能使用一次。

对象表达式和对象声明之间的语义差异

对象表达式和对象声明之间有一个重要的语义差别:

  • 对象表达式是在使用他们的地方立即执行的
  • 对象声明是在第一次被访问到时延迟初始化的
  • 伴生对象的初始化是在相应的类被加载(解析)时,与 Java 静态初始化器的语义相匹配
发布了26 篇原创文章 · 获赞 0 · 访问量 1128

猜你喜欢

转载自blog.csdn.net/Plx0303sunny/article/details/103435059