【问题标题】:Declare generic provider method in dagger2在 dagger2 中声明泛型提供程序方法
【发布时间】:2018-12-24 13:18:18
【问题描述】:

我在匕首 2 的模块中有这个提供方法:

@Provides
ArrayAdapter<String> arrayAdapter(Context context) {
    return new ArrayAdapter<>(context,R.layout.spinner_item);
}

我通过我的适配器构造函数注入它:

@Inject
public ReportMarhaleAdapter(ArrayAdapter<String> arrayAdapter) {
    detailMains = new ArrayList<>();
    ciExecStatus = new ArrayList<>();
    spinnerCiStatusAdapter = arrayAdapter;
}

是否可以像这样在匕首中使用泛型提供方法:

@Provides
ArrayAdapter<T> arrayAdapter(Context context) {
    return new ArrayAdapter<>(context,R.layout.spinner_item);
}

我在构造函数注入中声明了 T 类型。例如:

 @Inject
public ReportMarhaleAdapter(ArrayAdapter<Object> arrayAdapter) {
    detailMains = new ArrayList<>();
    ...

【问题讨论】:

    标签: android dagger-2 generic-programming


    【解决方案1】:

    我不是匕首专家,但使用@Named 可能会更好,而不是通用。

    @Provides
    @Named("SomethingXToBeProvided")
    ArrayAdapter<String> arrayAdapterX(Context context) {
        return new ArrayAdapter<>(context,R.layout.spinner_item);
    }
    
    @Provides
    @Named("SomethingYToBeProvided")
    ArrayAdapter<String> arrayAdapterY(Context context) {
        return new ArrayAdapter<>(context,R.layout.spinner_item);
    }
    

    然后

    @Inject
    public ReportMarhaleAdapter(
        @Named("SomethingXToBeProvided") ArrayAdapter<Object> arrayAdapterX, 
        @Named("SomethingYToBeProvided") ArrayAdapter<Object> arrayAdapterY) {
        ...
    }
    

    【讨论】:

    • 是的,按名称或限定符是可能的,但我想知道我可以使用通用吗?或者我该如何实现通用方式@blackkara
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    相关资源
    最近更新 更多