gpt4 book ai didi

java - Kotlin 对象类实例 get()

转载 作者:行者123 更新时间:2023-12-02 13:29:11 25 4
gpt4 key购买 nike

public class Singleton {
private static Singleton instance = null;
private Singleton(){
}

public synchronized static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
doSomeInitializationIfRequired();
return instance;
}
}
每当我们请求实例时,都会调用 getInstance() 方法,如果我们想在每次从任何地方调用实例时做某事,我们可以添加代码。
有没有办法覆盖实例变量 获取()像这样使用 Kotlin 对象
例如
object SomeSingleton {
get() = {
doSomeInitializationIfRequired()
}
}
我知道我会写
init {
}
但这只会被调用一次。

最佳答案

我不会使用 object对于这种类型的单例。您可以更像 Java 的方式来做到这一点。

class Singleton private constructor() {

companion object {
private val _instance = Singleton()
val instance: Singleton
get() = synchronized(this) {
doSomeInitializationIfRequired()
_instance
}
}

}
如果您需要构造函数或 doSomeInitializationIfRequired() 的参数, 你可以替换 val instancegetInstance功能。这在 Android 上很常见,您的单例可能需要对 Application 实例的引用。
class Singleton private constructor(val application: Application) {

companion object {
private val instance: Singleton? = null

fun getInstance(application: Application): Singleton = synchronized(this) {
val value = instance ?: Singleton(application).also { instance = it }
doSomeInitializationIfRequired(application)
value
}
}

}

关于java - Kotlin 对象类实例 get(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62509632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com