Kotlin:Java无法解析Kotlin Symbol?

我有一个如下所示的Kotlin代码, SingleKotlin.instance可以被其他Kotlin文件调用

 class SingleKotlin private constructor(){ companion object { val instance by lazy { SingleKotlin() } } } 

但是,当我尝试从java调用SingleKotlin.instance时,它显示无法解析符号“实例”

我不明白为什么,有人可以解释,我怎么解决这个问题?

5 Solutions collect form web for “Kotlin:Java无法解析Kotlin Symbol?”

只需在字段上方添加@JvmField注释(如本文档中所述, https: //kotlinlang.org/docs/reference/java-to-kotlin-interop.html#static-fields)

所以,你的代码应该是这样的:

 class SingleKotlin private constructor(){ companion object { @JvmField 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(); 
  • NoClassDefFoundError使用Exposed时
  • 如何测试委托属性的生成器?
  • Android Kotlin如何在多选列表视图中选中checkbox
  • Anko的uiThread偶尔没有被解雇
  • IntelliJ IDEA无法findorg.jetbrains.kotlin:kotlin-gradle-plugins
  • 如何将java.util.stream.Stream <Something>转换成kotlin.Sequence <Something>
  • 定义equals()运算符的问题
  • 如何创建rx.Single的缓存/热版本?
  • Kotlin使用迭代索引过滤lambda数组
  • Kotlin文件不能使用R.java
  • 与房间的多对多关系导致错误:实体和Pojos必须有一个可用的公共构造函数
  • Kotlin language will be the best programming language for Android.