android - Kotlin 中的单例类

标签 android kotlin

我想知道如何在 Kotlin 中创建一个单例类,以便我的 Util 类在每次应用执行时仅将其实例化一次。但是,当我将我的 Java 类转换为 kotlin 时,生成了以下代码。

这是正确的吗?

companion object {
    private var utilProject: UtilProject? = null

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

我可以找到相关的 question ,但它是带参数的,没有参数我无法转换。

最佳答案

在 Kotlin 中有一个特殊的关键字 object 用于单例。你可以输入一些简单的东西来获得工作单例类:

object MySingleton

或者当你想要一些成员函数时:

object MySingleton {
    fun someFunction(...) {...}
}

然后使用它:

MySingleton.someFunction(...)

有一个引用:https://kotlinlang.org/docs/reference/object-declarations.html#object-declarations

编辑:

在您的情况下,您只需将 class UtilProject 的定义替换为:

object UtilProject {

    // here you put all member functions, values and variables
    // that you need in your singleton Util class, for example:

    val maxValue: Int = 100

    fun compareInts(a: Int, b: Int): Int {...}
}

然后你可以简单地在其他地方使用你的单例:

UtilProject.compareInts(1, 2)
//or
var value = UtilProject.maxValue

关于android - Kotlin 中的单例类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51834996/

相关文章:

android - 在 Kotlin 中使用 Replace 函数

java - Kotlin (Mutable)List<(raw) kotlin.Any?> 转换为 List<JsonObject>

generics - 在 kotlin 中,测试泛型类型的值是否实现接口(interface),然后将其用作该接口(interface)的正确方法是什么?

android - 用于代码生成的 ANTLR Tool 版本 4.7.1 与当前运行时版本 4.5.3 不匹配

android - 如何终止AsyncTask?

android - 语音识别器 Intent 未取回 OnActivityResult 中的数据

android - if 子句在 onBindViewHolder Android 中无法正常工作

android - GridView 无法显示图像

android - file.createFile不起作用。 Android 10

java - 在TextView中将drawable设置为文本末尾