Внедрить Koin в классы Java

Я пытаюсь заменить Dagger 2 на Коин в моем текущем проекте, и я не хочу переписывать некоторые классы в Kotlin, чтобы использовать его.

Можно ли вводить с помощью Koin в классы Java?

В Котлине просто

// Inject MyPresenter
val presenter : MyPresenter by inject()

Спасибо

Я почти уверен, что это возможно. И Java, и Kotlin работают на JVM и, следовательно, должны быть совместимы.

Turing85 03.06.2018 19:05

Да, они работают. Но я хотел бы знать, как я могу получить доступ к инъекциям с помощью фреймворка Koin.

Rafa Araujo 03.06.2018 19:53

Это может вам помочь ... github.com/Ekito/koin/issues/81

Keshav Aggarwal 03.06.2018 20:13

Отлично, @keshavAggarwal Это то, что мне нужно gist.github.com/fredy-mederos/b74e8c2f2ca2f0f5d5910bcb694cbd‌ bf

Rafa Araujo 03.06.2018 20:17

Эй, твоя проблема решена?

Shudipto Trafder 11.04.2019 19:43
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
8
5
6 203
5

Ответы 5

Класс или файл могут иметь расширение .kt, обозначающее Kotlin, или расширение .java, обозначающее Java. Вы не можете написать файл или класс на обоих языках одновременно.

Но ваши файлы Java и Kotlin могут взаимодействовать друг с другом, то есть вы можете использовать класс Java с переменной и обращаться к этой переменной в вашем файле Kotlin или наоборот.

Таким образом, вы можете вставить ссылку на класс Kotlin и использовать ее в своем классе Java и наоборот.

Это может помочь: https://kotlinlang.org/docs/tutorials/mixing-java-kotlin-intellij.html

Надеюсь, это развеивает сомнения.

Да, это возможно. Просто синхронизируйте проект с этим файлом gradle

implementation "org.koin:koin-java:$koin_version"

В вашем классе Java

 // Inject MyPresenter
 replace //val presenter : MyPresenter by inject()

   with  private Lazy<MyPresenter> presenter = inject(MyPresenter.class);

и получить метод презентатора внутри класса Java, например

presenter.getValue().sayHello() 

Привет, @pawan soni, не могли бы вы уточнить, какой импорт вы используете для inject и Lazy? это import static org.koin.core.KoinComponentKt.inject; и import kotlin.Lazy;?

Blaze Gawlik 30.09.2019 22:17

kotlin.Lazy и org.koin.java.KoinJavaComponent.inject

Pawan Soni 01.10.2019 19:21

Согласно странице Коина на GitHub: // Koin for Java developers is now part of core, поэтому нет необходимости добавлять какие-либо дополнительные реализации в файл оценок.

ekreloff 24.09.2020 18:20

Убедитесь, что вы импортируете в gradle коин для библиотеки java и используете приведенные выше ответы.

Gradle:

implementation "org.koin:koin-java:2.0.1"

у меня работал следующий код без org.koin: koin-java: $ koin_version dependency:

private MyPresenter presenter = org.koin.java.KoinJavaComponentKoinJavaComponent.inject(MyPresenter.class).getValue();

Вам больше не нужна дополнительная зависимость koin-java, поскольку теперь она является частью koin-android и koin-core.

// Imports
import static org.koin.java.KoinJavaComponent.get;
import static org.koin.java.KoinJavaComponent.inject;
import static org.koin.core.qualifier.QualifierKt.named;
import static org.koin.core.parameter.DefinitionParametersKt.parametersOf;

// Lazy injection
Lazy<MyDependency> dependency = inject(MyDependency.class);

// Eager injection
MyDependency dependency = get(MyDependency.class);

// Named injection
get(MyDependency.class, named("MyNamedDependency"));

// Parameter injection
get(MyDependency.class, null, () -> parametersOf(this));

Документы Java для Android Koin

Другие вопросы по теме