Использование Kotlin Singleton из Java

1

Я прочитал об этом, и все, что я вижу, говорит, что я должен быть в состоянии сделать это, поэтому, должно быть, есть кое-что, что я пропускаю Я преобразовал класс Java в 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
Теги:
kotlin
singleton

3 ответа

2
Лучший ответ

Аннотируйте вашу функцию с помощью @JvmStatic чтобы при компиляции генерировалась настоящая статическая функция Java.

  • 0
    Независимо от того, является объект компаньоном или нет, не имеет значения: «Kotlin может также генерировать статические методы для функций, определенных в именованных объектах или объектах-компаньонах, если вы аннотируете эти функции как @JvmStatic».
3

Ты можешь использовать:

object OrderTitle {
    @JvmStatic
    fun generateMessage(context: Activity, otherParameter: AType? = null): AnotherType {
        // Do some things
   }
}

и тогда вы можете вызвать его из Java:

OrderTitle.generateMessage(...)
1

Идиоматический способ сделать это с помощью функций верхнего уровня,

@file:JvmName("ClassNameHere")
fun generateMessage(context: Activity, otherParameter: AType? = null): AnotherType {
    // Do some things
}

Тогда из Java просто используйте его как

ClassNameHere.generateMessage()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню