Как внедрить примитивные переменные в Котлин?

Я использую Dagger2 для DI в своем приложении для Android, и с помощью этого кода для внедрения классов в мою активность все в порядке:

@field:[Inject ApplicationContext]
lateinit var context: Context

но модификатор lateinit не разрешен для свойств примитивного типа в Kotlin (например, Boolean), как я могу сделать что-то подобное?

@field:[Inject Named("isDemo")]
lateinit var isDemo: Boolean

когда я удаляю lateinit из этого кода, я получаю эту ошибку Dagger does not support injection into private fields


person Mohsen Mirhoseini    schedule 23.06.2017    source источник
comment
@Miha_x64, а где аннотации Inject и Named?!   -  person Mohsen Mirhoseini    schedule 23.06.2017
comment
@Miha_x64 Спасибо, работает!   -  person Mohsen Mirhoseini    schedule 23.06.2017
comment
@Miha_x64, пожалуйста, добавьте свой ответ. Проголосовать за комментарии так скучно.   -  person tynn    schedule 23.06.2017


Ответы (2)


Во-первых, вам не нужен lateinit, вы можете оставить его как var и инициализировать произвольным значением. Во-вторых, вы должны открыть поле, чтобы позволить Dagger'у вводить туда. Итак, вот решение:

@JvmField // expose a field
@field:[Inject Named("isDemo")] // leave your annotatios unchanged
var isDemo: Boolean = false // set a default value
person Miha_x64    schedule 23.06.2017
comment
Возможно, вам следует подумать о protected true, если вы хотите защитить свою собственность от доступа (и изменения) только в (под)классах - работает с Dagger, потому что это не приведет к private - person r00tandy; 19.07.2017
comment
Это работает. Спасибо. Это какой-то беспорядок. Надеюсь, кинжал/котлин решит эту проблему. - person rpattabi; 09.12.2019

Принятый ответ не сработал со мной, но хорошо сработало следующее:

@set:[Inject Named("isDemo")]
var isDemo: Boolean = false

Источник

person Mohamed Medhat    schedule 24.09.2020
comment
Это должен быть принятый ответ! - person Bharadwaj Giridhar; 13.12.2020
comment
У меня работает только принятый ответ, а не ваш. В вашем случае я получаю сообщение об ошибке Dagger не поддерживает внедрение в частные поля - person JerabekJakub; 04.05.2021