使用来自 Java 的 Kotlin 单例
Using Kotlin singleton from Java
我已经阅读了这方面的内容,我所看到的一切都表明我应该能够做到这一点,所以一定有一些我遗漏的小东西。我已经将 Java class 转换为 Kotlin:
object OrderTitle {
@JvmOverloads
fun generateMessage(context: Activity, otherParameter: AType? = null): AnotherType {
// Do some things
}
}
我从 Java 调用它:
message = OrderTitle.generateMessage(activity, property);
并得到这个错误:
error: non-static method generateMessage(Activity,Property) cannot be referenced from a static context
用 @JvmStatic
注释您的函数,以便在编译时生成真正的静态 java 函数。
您可以使用:
object OrderTitle {
@JvmStatic
fun generateMessage(context: Activity, otherParameter: AType? = null): AnotherType {
// Do some things
}
}
然后您可以从 Java:
调用它
OrderTitle.generateMessage(...)
执行此操作的惯用方法是使用顶级函数,
@file:JvmName("ClassNameHere")
fun generateMessage(context: Activity, otherParameter: AType? = null): AnotherType {
// Do some things
}
然后从 java 开始使用它作为
ClassNameHere.generateMessage()
我已经阅读了这方面的内容,我所看到的一切都表明我应该能够做到这一点,所以一定有一些我遗漏的小东西。我已经将 Java class 转换为 Kotlin:
object OrderTitle {
@JvmOverloads
fun generateMessage(context: Activity, otherParameter: AType? = null): AnotherType {
// Do some things
}
}
我从 Java 调用它:
message = OrderTitle.generateMessage(activity, property);
并得到这个错误:
error: non-static method generateMessage(Activity,Property) cannot be referenced from a static context
用 @JvmStatic
注释您的函数,以便在编译时生成真正的静态 java 函数。
您可以使用:
object OrderTitle {
@JvmStatic
fun generateMessage(context: Activity, otherParameter: AType? = null): AnotherType {
// Do some things
}
}
然后您可以从 Java:
调用它OrderTitle.generateMessage(...)
执行此操作的惯用方法是使用顶级函数,
@file:JvmName("ClassNameHere")
fun generateMessage(context: Activity, otherParameter: AType? = null): AnotherType {
// Do some things
}
然后从 java 开始使用它作为
ClassNameHere.generateMessage()