Kotlin:Java无法解析Kotlin Symbol?
我有一个如下所示的Kotlin代码, SingleKotlin.instance
可以被其他Kotlin文件调用
class SingleKotlin private constructor(){ companion object { val instance by lazy { SingleKotlin() } } }
但是,当我尝试从java调用SingleKotlin.instance
时,它显示无法解析符号“实例”
我不明白为什么,有人可以解释,我该如何解决这个问题?
只需在字段上方添加@JvmStatic注释(如本文档中所述https://kotlinlang.org/docs/reference/java-to-kotlin-interop.html#static-fields )
所以,你的代码应该是这样的:
class SingleKotlin private constructor(){ companion object { @JvmStatic val instance by lazy { SingleKotlin() } } }
现在你可以这样称呼它
SingleKotlin.instance
除了@YuriiKyrylchuk的答案:另一个选项(如果你不能控制Kotlin代码,唯一的选择)就是引用来自Java的MyClass.Companion
。 例:
class MyClass { companion object { val x: Int = 0 } }
在Java中:
MyClass.Companion.getX();
如果你的SingleKotlin
对象有一个不带参数的私有构造函数,你可以使用object
来代替:
object SingleKotlin { // some members of SingleKotlin val x = 42 }
然后在Java中通过INSTANCE
静态字段引用它:
SingleKotlin single = SingleKotlin.INSTANCE; // or SingleKotlin.INSTANCE.getX();
你需要像这样调用Java的方法:
AppUIUtils.Companion.yourMethod()
除了Ilya的回答,你可以使用@JvmStatic注解
object SingleKotlin { // some members of SingleKotlin @JvmStatic val x = 42 }
然后在Java中
SingleKotlin.getX();
- Java的互操作性:如何在Kotlin中声明一个编译时数组常量?
- 以完整的长度截图RecyclerView
- Kotlin获取类型为字符串
- Spring Boot + Kotlin AutoProxyRegistrar导致Nullpointerexception
- ListView.CHOICE_MODE_SINGLE未解决的参考
- Android Studio 3.0“JUnit版本3.8或更高版本”
- 如果在kotlin中找不到项目,如何在下一个位置添加元素
- 尽管使用RxJava在另一个线程上订阅,但在使用Google的People API时仍然收到IllegalStateExceptionexception
- RxJava Observable to Completable,如何避免toBlocking()