如何从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
相关产品推荐
相关产品推荐

