Как получить доступ к сопутствующему объекту Kotlin в Java?

Я конвертирую один из моих классов Java в Kotlin и класс, как показано ниже.

class MainApplication : Application() { companion object { operator fun get(context: Context): MainApplication { return context.applicationContext as MainApplication } } } 

Он имеет статическую функцию get .

У меня все еще есть функция Java, доступ к которой.

 MainApplication application = MainApplication.get(mContext); 

Это было хорошо, когда MainApplication находится на Java. Но не тогда, когда MainApplication в Котлине, приведенная выше ошибка кода

 Error:(27, 54) error: cannot find symbol method get(Context) 

Как я могу get доступ к моему Java-коде выше?

Вы можете добавить примечание @JvmStatic к методу в сопутствующем объекте, чтобы заставить Kotlin генерировать статический метод.

 class MainApplication : Application() { companion object { @JvmStatic fun get(context: Context): MainApplication { return context.applicationContext as MainApplication } } } 

вы можете получить к нему доступ с Java, как перед конвертированием в Kotlin:

 MainApplication application = MainApplication.get(mContext); 

EDIT: Я чувствую себя обязанным добавить что-то, что я узнал недавно: @JvmStatic фактически не перемещается туда, где метод генерируется. Он дублирует его, создавая статический метод для Java в дополнение к методу сопутствующего объекта. Лично я думаю, что это не здорово, и это может иметь некоторые последствия в зависимости от варианта использования, поэтому что-то стоит знать.

Опс, я понял. Просто используйте ниже.

 MainApplication application = MainApplication.Companion.get(mContext); 

Опуская имя вашего сопутствующего объекта, для доступа к методам необходимо использовать имя Companion .

Пример:

 class MyClass1 { companion object Object1 { fun method1 { } } } class MyClass2 { companion object { fun method2 { } } } 

Чтобы вызвать первый метод сопутствующих объектов, вы должны сделать следующее:

 MyClass1.method1() 

Чтобы вызвать второе:

 MyClass2.Companion.method2() 

Подробные сведения см. В документах Kotlin на объектах Companion .

Intereting Posts
RecyclerView анимация элемента, onAnimationFinished, но не onAnimationStarted. Зачем? В TornadoFX, как я могу отделить макеты к различным классам, а затем использовать их в построителе? Борясь с попыткой получить изображение с камеры для загрузки в Firebase – java.lang.IllegalStateException: uri не должен быть нулевым Ни один из подписчиков RxJava onNext / onError / onComplete не вызывается при цепочке. Наблюдения, созданные из Observable.create () Невозможно создать прослушиватель событий Spring Data в Котлине Kotlin coroutines в Android: зачем использовать bg () из Anko вместо async ()? NotificationListenerСервис не создан Android-устройство logcat продолжает работать Могу ли я использовать Coroutines Котлина, используя их в Java-коде? gradle не может скомпилировать API google places Можно ли использовать Maven для разработки Frontend / Web-приложений? Были отчеты об обработке ошибок в кодеков Можно выбрать версию Android Studio kotlin? Kotlin – Значение преобразования при инициализации Разделить список на части