当前位置:
首页
文章
移动端
详情

如何在 Kotlin 中创建单例类?

Singleton 是一个全局对象,可以从应用程序的任何地方访问。本文展示了在 Kotlin 中创建它的不同方法。

在 Kotlin 中,您可以使用对象声明来实现单例。但是,如果你不知道这个对象关键字,你可能会做这样的事情。

常规单例

class Singleton private constructor() {

    companion object {
        @Volatile
        private lateinit var instance: Singleton

        fun getInstance(): Singleton {
            synchronized(this) {
                if (!::instance.isInitialized) {
                    instance = Singleton()
                }
                return instance
            }
        }
    }

    fun show() {
        println("This is Singleton class!")
    }
}

fun run() {
    Singleton.getInstance().show()
}

  • private constructor()使用,因此不能像往常一样创建类
  • @Volatilesynchronized()用于确保此 Singleton 创建是线程安全的。

对象声明单例

这可以简化为

object Singleton {
    fun show() {
        println("This is Singleton class!")
    }
}

fun run() {
    Singleton.show()
}

Singleton是一个类,也是一个单例实例,您可以在其中直接从代码访问单例对象。

构造函数参数单例

此对象声明的限制是您不能将构造函数参数传递给它来创建单例对象。如果你想这样做,你仍然需要使用第一种常规方法。

class Singleton private constructor(private val name: String) {

    companion object {
        @Volatile
        private lateinit var instance: Singleton

        fun getInstance(name: String): Singleton {
            synchronized(this) {
                if (!::instance.isInitialized) {
                    instance = Singleton(name)
                }
                return instance
            }
        }
    }

    fun show() {
        println("This is Singleton $name class!")
    }
}

fun run() {
    Singleton.getInstance("liang moi").show()
}

结论

我个人将单例用于简单的实用程序类(使用对象声明)和数据库(使用约定单例方法 - 因为它需要传入参数)。

链接:https://vtsen.hashnode.dev/how-to-create-singleton-class-in-kotlin#heading-conventional-singleton

免责申明:本站发布的内容(图片、视频和文字)以转载和分享为主,文章观点不代表本站立场,如涉及侵权请联系站长邮箱:xbc-online@qq.com进行反馈,一经查实,将立刻删除涉嫌侵权内容。