我有以下形式的活动:

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中注入依赖项?

最佳答案

我想出的解决方案是使用类型参数实现Activity / Fragment的不同情况,并贡献实现。对于您的情况将是这样的:

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


假设您有一个扩展BookDescriptionItemAbstractDescriptionItem类:

public class BookDescriptionActivity extends MyActivity<BookDescriptionItem>


最后,贡献实现:

@ContributesAndroidInjector
abstract BookDescriptionActivity contributeBookDescriptionActivity();

关于android - 在通用类中注入(inject)字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50372356/

10-12 02:21