kotlin 两种单实例写法

在Kotlin中,没有静态变量和静态方法,但是可以通过Kotlin中的 伴生对象 来实现。

第一种懒汉式写法:

复制代码
class Singleton private constructor(){
    // 单例,私有的主构造函数,无从构造函数

    var code: Int = 0
    var msg: String = ""
    var data: String = ""
    // 声明类的伴生对象
    companion object {
        private var singleInstance: Singleton? = null
        get() {
            // 懒汉模式
            if(null == field) {
                field = Singleton()
            }
            return field
        }

        @Synchronized // 添加注解,线程同步,线程安全
        fun getInstance(): Singleton {
            return singleInstance!! // 表示非空时执行
        }
    }

    fun print() {
        println("Result: $code, $msg, $data")
    }
}

第二种:饿汉式

复制代码
class Singleton private constructor(){
    // 单例,私有的主构造函数,无从构造函数

    var code: Int = 0
    var msg: String = ""
    var data: String = ""

    companion object {
        public var instance: Singleton = Singleton()
        @Synchronized // 注解,get线程同步
        get
    }

    fun print() {
        println("Result: $code, $msg, $data")
    }

}
相关推荐
xhbh66614 分钟前
【实战避坑】MySQL自增主键(AUTO_INCREMENT)全解:从锁机制、间隙问题到分库分表替代方案
android·数据库·mysql·mysql自增主键
TimeFine31 分钟前
Android 通过Dialog实现全屏
android
用户2018792831671 小时前
Android Input 的 “快递双车道”:为什么要用 Pair Socket?
android
ajassi20001 小时前
开源 java android app 开发(十八)最新编译器Android Studio 2025.1.3.7
android·java·开源
用户2018792831671 小时前
Java 泛型:快递站老板的 "类型魔法" 故事
android
Knight_AL2 小时前
浅拷贝与深拷贝详解:概念、代码示例与后端应用场景
android·java·开发语言
夜晚中的人海3 小时前
【C++】智能指针介绍
android·java·c++
用户2018792831673 小时前
后台Activity输入分发超时ANR分析(无焦点窗口)
android
用户2018792831673 小时前
Activity配置变化后ViewModel 的 “不死之谜”
android
游戏开发爱好者84 小时前
BShare HTTPS 集成与排查实战,从 SDK 接入到 iOS 真机调试(bshare https、签名、回调、抓包)
android·ios·小程序·https·uni-app·iphone·webview