Вставить поля в общий класс - PullRequest
0 голосов
/ 16 мая 2018

У меня есть активность в следующей форме:

public class MyActivity<T extends AbstractDescriptionItem> extends BaseActivity[...]

когда я определяю:

@ContributesAndroidInjector
abstract MyActivity contributeMyActivity();

Я получаю эту ошибку:

error: [Dagger/MembersInjection] [dagger.android.AndroidInjector.inject(T)] Cannot inject members into raw type com.test MyActivity

если я попытаюсь:

@ContributesAndroidInjector
abstract MyActivity<AbstractDescriptionItem> contributeMyActivity();

Я получаю

error: @ContributesAndroidInjector methods cannot return parameterized types

Есть ли способ внедрить зависимости в MyActivity без изменения архитектуры?

1 Ответ

0 голосов
/ 02 октября 2018

Решение, которое я придумал, заключается в реализации различных случаев Activity / Fragment с параметрами типа и внесении реализаций.Для вашего случая это будет примерно так:

public abstract class MyActivity<T extends AbstractDescriptionItem> extends BaseActivity[...]

Допустим, у вас есть BookDescriptionItem класс, расширяющий AbstractDescriptionItem:

public class BookDescriptionActivity extends MyActivity<BookDescriptionItem>

Наконец, добавьте реализации:

@ContributesAndroidInjector
abstract BookDescriptionActivity contributeBookDescriptionActivity();
...