You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Java中引用Kotlin委托单例对象?

在Java中调用Kotlin委托单例的Set方法

你的Kotlin object 是基于TreeSet委托实现的单例集合类,在Java中有两种方式调用它的contains方法:

方式1:直接通过单例实例调用(无需修改Kotlin代码)

Kotlin的object在Java中会被编译为带INSTANCE静态字段的类,直接通过该字段访问单例实例即可调用方法:

boolean isContained = MySet.INSTANCE.contains("targetString");

方式2:实现类名静态调用(需修改Kotlin代码)

如果想要像MySet.contains("targetString")这种静态调用的写法,需要在Kotlin的object中手动添加带@JvmStatic注解的包装方法,把委托的实例方法暴露为Java静态方法:

object MySet : MutableSet<String> by TreeSet<String>() {

    init {
        // 你的初始化逻辑
    }

    @JvmStatic
    fun contains(s: String): Boolean = super.contains(s)

    // 如需其他方法的静态调用,可按同样方式包装
    @JvmStatic
    fun add(s: String): Boolean = super.add(s)

    @JvmStatic
    fun getSize(): Int = super.size
}

之后在Java中就能直接通过类名调用:

boolean hasElement = MySet.contains("hello");
int setSize = MySet.getSize();

原理说明

Kotlin的委托机制会将MutableSet的方法映射为单例类的实例方法,而@JvmStatic注解会让Kotlin编译器生成对应的Java静态方法,从而支持Java端的类名直接调用。如果不需要静态调用的写法,方式1是最简洁的选择。

内容的提问来源于stack exchange,提问作者David Soroko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 04:25:38