Кинжал 2 - ошибка: методы @Provides не могут быть статическими

Я только что добавил Dagger в свой Android-проект. Я переработал некоторые из моих классов в соответствии с шаблоном внедрения зависимостей и использовал аннотацию @Inject в их конструкторах. Я также создал соответствующие модули и компоненты. Когда я пытаюсь его скомпилировать, некоторые методы @Provides из модулей выдают мне эту ошибку:

error: @Provides methods cannot be static

Все методы, которые вызывают эту ошибку, являются @Singleton, статическими и не имеют параметров. У меня также есть некоторые методы @Provides, которые являются @Singleton и static, но имеют хотя бы один параметр, и они не дают никаких ошибок.

Кто-нибудь знает, в чем причина этих ошибок? Согласно официальному руководству пользователя, Dagger 2 должен поддерживать статические методы @Provides.

@Module
public class DataModule {

@Provides
@Singleton
static MessageDatabaseAdapter provideMessageDatabaseAdapter() { //this method gives error
    return new MessageDatabaseAdapter();
}

@Provides
@Singleton //this method seems OK
static MessageDataSource provideMessageDataSource(MessageDatabaseAdapter databaseAdapter) {
    return new MessageDataSource(databaseAdapter);
}

@Provides
@Singleton
static ContactsDataSource provideContactsDataSource() { //this method also gives error
    return new ContactsDataSource();
}

}

поделитесь своим кодом.

Hemant Parmar 08.08.2018 13:25

@HemantParmar ОК, поделился одним из проблемных модулей.

amethystAnt 08.08.2018 13:37

ты сюда смотрел - https://stackoverflow.com/questions/38607503/static-provide-‌ метод-в-кинжале2

Vadim Eksler 08.08.2018 13:41

@VadimEksler Да, но это не очень полезно, так как только обсуждает, почему использовать статические методы \ @Provides, а не почему мой код не работает ...

amethystAnt 08.08.2018 13:47

ваш класс MessageDatabaseAdapter статичен?

Hemant Parmar 08.08.2018 13:49

@HemantParmar да, это отдельный класс в собственном java файле

amethystAnt 08.08.2018 13:53

Какую версию Dagger вы добавили? 2,17?

EpicPandaForce 08.08.2018 15:15

@EpicPandaForce спасибо, это была проблема. Я добавил 2.0, который, вероятно, действительно не поддерживает статические методы предоставления.

amethystAnt 08.08.2018 22:23
1
8
211
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема заключалась в том, что я добавил в свой проект старую версию Dagger. В моем случае это была версия 2.0, но на момент написания этой статьи последней версией была 2.17, для которой было создано вышеупомянутое руководство пользователя.

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