Kotlin 初学者单例类(object)

Posted 帅次

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin 初学者单例类(object)相关的知识,希望对你有一定的参考价值。

object 关键字

  • 使用 object 关键字,你可以定义一个只能产生一个实例的类-单例

  • 使用object关键字有三种方式

    • 对象声明

    • 对象表达式

    • 伴生对象(companion 关键字)

        用对象表达式和对象声明来实现创建一个对某个类做了轻微改动的类的对象,且不需要去声明一个新的子类。

对象声明

        使用 object 关键字来声明一个对象,通过对象声明来获得一个单例。

        作用:对象声明有利于组织代码和管理状态,尤其是管理整个应用运行生命周期内的某些一致性状态。

/*使用object声明对象*/
object AppUtils
    init 
        println("AppUtils init")
    
    fun doData()
        println("AppUtils doData")
    

//使用
fun main() 
    //AppUtils既是类名又是实例名
    AppUtils.doData()

        当时当你定义两个不同的变量来获取这个对象时,你会发现你并不能得到两个不同的变量。也就是说通过这种方式,我们获得一个单例。

对象表达式

        通过对象表达式实现一个匿名内部类的对象。如果你需要某个现有类的一种变体实例,但只需用一次就行了,事实上,对于这种用完就丢的类实例,连命名都可以省了。这个对象表达式是XX的子类,这个匿名类依然遵循object关键字的一个规则,即一旦实例化,该匿名类只能有唯一一个实例存在。

open class Uesr
    var name = "帅次"
    var age = 16
    open fun doInfo() = "Uesr doInfo"

//使用
fun main() 
    //User类别忘记加open关键字
    val user = object : Uesr()
        override fun doInfo()= "User object"
    
    println(user.doInfo())

不定义类,直接得到一个对象

    //通过对象表达式可以越过类的定义直接得到一个对象
    val vipUser = object 
        var name = "Kotlin"
        var age = 15
    
    println(vipUser.name)
    println(vipUser.age)

伴生对象

        如果你想将某个对象的初始化和一个类实例捆绑在一起,可以考虑使用伴生对象,使用companion修饰符,你可以在一个类定义里声明一个伴生对象一个类里只能有一个伴生对象

        例如:例如东皇太一刚出生就有混沌钟,东皇钟就是东黄天一的伴生至宝

open class `东皇太一`
    companion object 
        val lq = "刚出生就有先天至宝"
        fun `混沌钟`() = lq

    

//使用
fun main() 
    //`东皇太一`类直接调用伴生对象函数。
    println(东皇太一.混沌钟())

  • 只有调用 东皇太一 或者调用 混沌钟函数,伴生对象才会实例化

  • 节省内存:

    • 如果不调用那么伴生对象就不会实例化也不会占用内存。

    • 无论你调用多少次东皇太一类 或者调用 混沌钟函数,伴生对象只会实例化一次。

以上是关于Kotlin 初学者单例类(object)的主要内容,如果未能解决你的问题,请参考以下文章

kotlin 之单例类详解

Kotlin 中的单例类

Kevin Learn Kotlin:数据类单例类枚举类

Kotlin中数据类和单例类的实现和讲解面向对象编程接口的实现

Kotlinobject 对象 ( object 关键字 | 对象声明 | 对象表达式 | 伴生对象 )

Kotlinobject 对象 ( object 关键字 | 对象声明 | 对象表达式 | 伴生对象 )