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

}
相关推荐
wilsend10 分钟前
Android Studio 2024版新建java项目和配置环境下载加速
android
兰琛27 分钟前
Android Compose展示PDF文件
android·pdf
路人甲ing..1 小时前
Ubuntu怎么安装tar.gz (android-studio为例)
linux·ubuntu·kotlin·android studio
走在路上的菜鸟1 小时前
Android学Dart学习笔记第四节 基本类型
android·笔记·学习
百锦再2 小时前
第21章 构建命令行工具
android·java·图像处理·python·计算机视觉·rust·django
skyhh3 小时前
Android Studio 最新版汉化
android·ide·android studio
路人甲ing..3 小时前
Android Studio 快速的制作一个可以在 手机上跑的app
android·java·linux·智能手机·android studio
携欢6 小时前
PortSwigger靶场之Web shell upload via path traversal靶场通关秘籍
android
消失的旧时光-194314 小时前
Android ADB指令大全详解
android·adb
ashcn200116 小时前
opengl 播放视频的android c++ 方案
android·c++ opengl es