微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – Kotlin中的Singleton类

我想知道创建单例类的方法,以便我的Util类每个应用程序只实例化一次.但是当我将我的Java类转换为kotlin时,会生成以下代码.

这个对吗?

companion object {
    private var utilProject: UtilProject? = null

    val instance: UtilProject
        get() {
            if (utilProject == null) utilProject = UtilProject()
            return utilProject!!
        }
} 

我可以找到一个相关的question,但它是带参数的,我没有在没有参数的情况下进行转换.

解决方法:

只是

companion object {
    val instance = UtilProject()
} 

将完成这项工作,因为伴侣对象本身是一个语言级单身人士.
(首次调用伴随对象时将分配实例.)

– 更新 –

如果需要在启动单例对象时进行调整,可以为每个类创建一个对象.

class UtilProject {
    ....
    companion object {
        val instance = UtilProject()
    }
}

class AnotherClass {
    ...
    companion object {
        val instance = AnotherClass()
        const val abc = "ABC"
    }
}

fun main(args: Array<String>) {
    val a = UtilProject.instance // UtilProject.instance will be initialized here.
    val b = AnotherClass.abc // AnotherClass.instance will be initialized here because AnotherClass's companion object is instantiated.
    val c = AnotherClass.instance
}

这里,在实际调用AnotherClass.instance之前初始化AnotherClass.instance.它在调用AnotherClass的伴随对象时初始化.
为了防止在需要之前进行初始化,您可以像这样使用:

class UtilProject {
    ....
    companion object {
        fun f() = ...
    }
}

class AnotherClass {
    ...
    companion object {
        const val abc = "ABC"
    }
}

object UtilProjectSingleton {
    val instance = UtilProject()
}

object AnotherClassSingleton {
    val instance = AnotherClass()
}

fun main(args: Array<String>) {
    UtilProject.f()
    println(AnotherClass.abc)

    val a = UtilProjectSingleton.instance // UtilProjectSingleton.instance will be initialized here.
    val b = AnotherClassSingleton.instance // AnotherClassSingleton.instance will be initialized here.

    val c = UtilProjectSingleton.instance // c is a.
}

如果您不关心每个单例初始化时,您也可以这样使用:

class UtilProject {
    ....
    companion object {
        fun f() = ...
    }
}

class AnotherClass {
    ...
    companion object {
        const val abc = "ABC"
    }
}

object Singletons {
    val utilProject = UtilProject()
    val anotherClass = AnotherClass()
}

fun main(args: Array<String>) {
    val a = Singletons.utilProject
    val b = Singletons.anotherClass 
}

综上所述,
对象或伴侣对象是Kotlin中的一个单独对象.
您可以在一个或多个对象中分配变量,然后像使用单个变量一样使用变量.

对象或伴随对象在首次使用时进行实例化.
当对象首次被实例化时(即,首次使用对象时),初始化对象中的val和vars.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐