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")
    }

}
相关推荐
dengyuezhe806016 分钟前
《C++ 异常机制与智能指针:从原理到实现》
android·java·c++
Wonderful U44 分钟前
Python+Django实战|企业办公用品申领管理系统:物资入库、库存预警、申领审批、归还登记、损耗统计、供应商对账
android·python·django
plainGeekDev44 分钟前
网络状态监听 → ConnectivityManager + Flow
android·java·kotlin
楠目1 小时前
CVE-2013-4547 Nginx URI解析漏洞利用总结
android
Coffeeee1 小时前
不能用公司的打包机,AI帮我实现了一套比打包机更好用的Android包构建/分发流程
android·人工智能·ai编程
多彩电脑2 小时前
向AIDE(安卓设备上的Android Studio)导入aar库
android·java·开发语言·androidx
恋猫de小郭2 小时前
解析华为 DevEco Code 和小米 MiMo Code,都基于 OpenCode ,有什么区别?
android·前端·ios
Kapaseker2 小时前
你的第一个 Agent — 切换模型
kotlin·agent
2501_932750262 小时前
Android 控件与布局全面解析
android
问心无愧05132 小时前
ctfshow web入门114
android·前端·笔记