Kotlin:Java 无法解析 Kotlin 符号?
Kotlin: Java can't resolve Kotlin Symbol?
我有一个如下的Kotlin代码,SingleKotlin.instance
可以被其他Kotlin文件调用
class SingleKotlin private constructor(){
companion object {
val instance by lazy {
SingleKotlin()
}
}
}
但是,当我尝试从 java 调用 SingleKotlin.instance
时,它显示无法解析符号 '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 代码,唯一的选择)是从 [=18= 引用 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();
我有一个如下的Kotlin代码,SingleKotlin.instance
可以被其他Kotlin文件调用
class SingleKotlin private constructor(){
companion object {
val instance by lazy {
SingleKotlin()
}
}
}
但是,当我尝试从 java 调用 SingleKotlin.instance
时,它显示无法解析符号 '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 代码,唯一的选择)是从 [=18= 引用 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();