при использовании @Named получение java .lang.String невозможно обеспечить без конструктора @Inject или метода с аннотацией @ Provides - PullRequest
0 голосов
/ 05 апреля 2020

Всякий раз, когда я использую аннотацию @Named в своем коде, я всегда получаю «java .lang.String не может быть предоставлено без конструктора @Inject или метода @ Provides-annotated». эта ошибка Пожалуйста, найдите фрагменты кода ниже, но перед проверкой кода позвольте мне прояснить вам, чего я хочу достичь, и с какой именно проблемой я сталкиваюсь. Поэтому я пытаюсь сохранить две функции в моем файле модуля, которые возвращают тот же тип, что и String, для этого я пытаюсь использовать аннотацию @Named, и после этого я получаю вышеупомянутую ошибку, и если я сохраняю только одну функцию для типа String, тогда моя Проект выполняется без ошибок.

Это мой класс компонентов

@Singleton
@Component(modules = [GeneralModules::class])
interface MainComponent {

    fun dummyString():String
}

Это мой класс модуля

@Module
class GeneralModules {

     @Provides
    @Singleton
    @Named("name1")
    fun getDummyString1(): String{
        return "some name"
    }

   @Provides
   @Singleton
   @Named("name2")
   fun getDummyString(): String{
       return "some name"
   }

}

Это то, как я использую внутри класса Activity

@Inject
@field:Named("name1")
lateinit var name1: String

@Inject
@field:Named("name2")
lateinit var name2: String

Поэтому, если я удалил @Named из файла модуля, удалите одну функцию и удалить @field: Именованный код из действия, которое он запустит без ошибок.

1 Ответ

1 голос
/ 05 апреля 2020

Вы можете использовать annotation class с @Qualifier из javax.inject.Qualifier

Файл классификатора

@Qualifier
annotation class Name1

@Qualifier
annotation class Name2

Класс модуля

@Module
class GeneralModules {

    @Provides
    @Singleton
    @Name1
    fun getDummyString1(): String{
        return "some name"
    }

    @Provides
    @Singleton
    @Name2
    fun getDummyString(): String{
        return "some name"
    }
}

внутри кода Класс деятельности

@Inject
@Name1
lateinit var name1: String

@Inject
@Name2
lateinit var name2: String
...