Java Kotlin的等价物是什么;“偷懒”;在爪哇?

Java Kotlin的等价物是什么;“偷懒”;在爪哇?,java,android,kotlin,Java,Android,Kotlin,我跟随这篇文章来实现android生命周期,但是要在java上有应用程序类的遗留应用程序上实现 如何用java实现这个kotlin代码 private val lifecycleListener: SampleLifecycleListener by lazy { SampleLifecycleListener() } 我觉得这是一个愚蠢的问题,但我不熟悉惰性初始化,我不知道如何搜索这个问题,任何“惰性理论链接”也将受到欢迎 private SampleLifecycleListene

我跟随这篇文章来实现android生命周期,但是要在java上有应用程序类的遗留应用程序上实现

如何用java实现这个kotlin代码

private val lifecycleListener: SampleLifecycleListener by lazy {
    SampleLifecycleListener()
}
我觉得这是一个愚蠢的问题,但我不熟悉惰性初始化,我不知道如何搜索这个问题,任何“惰性理论链接”也将受到欢迎

private SampleLifecycleListener sll;

public synchronized SampleLifecycleListener getSampleLifecycleListener() {
    if (sll == null) {
        sll = new SampleLifecycleListener();
    }
    return sll;
}

这样,在调用getter之前不会初始化它

从Java8开始,您可以使用来实现懒惰
ConcurrentHashMap
是线程安全的

class Lazy {
    private final ConcurrentHashMap<String, SampleLifecycleListener> instance = new ConcurrentHashMap<>(1);

    public SampleLifecycleListener getSampleLifecycleListener() {
        return instance.computeIfAbsent("KEY", k -> new SampleLifecycleListener()); // use whatever constant key
    }
}

如果您想:

import kotlin.Lazy;

Lazy<SampleLifecycleListener> lazyListener = kotlin.LazyKt.lazy(() -> new SampleLifecycleListener()));
SampleLifecycleListener realListener = lazyListener.getValue();
导入kotlin.Lazy;
Lazy lazyListener=kotlin.LazyKt.Lazy(()->new SampleLifecycleListener());
SampleLifecycleListener realListener=lazyListener.getValue();

get函数中的
synchronize
如何?@KingfisherPhuoc对于多线程支持,
synchronized
可能成本太高,所以支架模式更好。请参阅中的示例,其中也显示了Java示例。@KingfisherPhuoc是否需要这样做?此方法将仅在onCreate()中调用,并且由于它仅在UI线程上运行,因此不需要任何同步。谢谢,忘记添加同步。Kotlin与Java相比的一个优点是,它允许您在仍然允许为空的情况下进行惰性计算。比较Java和Kotlin。(一个简单的web搜索很容易找到,所以“不知道如何搜索”听起来像是“懒得自己搜索”,没有双关语的意思)看看这个问题:(java 8)延迟加载不是内置于java中的。您必须自己实现它(如下面的答案所示),或者使用为您实现它的库(例如Spring)。似乎有一个Android lazy初始化库,因为它是一种相当直接的代理技术。@Andreas您的链接是金色的,谢谢,我确实做了搜索,但主要结果是关于lateinit vs lazy,等等。我可能没有采纳你的建议,因为我认为这是关于如何以及何时使用惰性初始化的另一种解释,所以我可能忽略了它。也许你说的“不确定如何搜索”听起来是真的,我尽量避免回答“先搜索再提问!”而没有有用的内容。不是你的情况,现在我学到了更多关于懒惰的知识:)你不能在其他解决方案中使用锁吗?我觉得地图会增加一点开销。
import kotlin.Lazy;

Lazy<SampleLifecycleListener> lazyListener = kotlin.LazyKt.lazy(() -> new SampleLifecycleListener()));
SampleLifecycleListener realListener = lazyListener.getValue();