使用来自 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()