Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用Dagger 2提供供应商空地图的@Multibiding_Android_Kotlin_Dagger 2_Android Architecture Components - Fatal编程技术网

Android 使用Dagger 2提供供应商空地图的@Multibiding

Android 使用Dagger 2提供供应商空地图的@Multibiding,android,kotlin,dagger-2,android-architecture-components,Android,Kotlin,Dagger 2,Android Architecture Components,我的问题是:我试图声明具有以下签名的多重绑定:Map。当我的作用域模块中有一个IntoMap时,多重绑定会按预期工作。但是,此映射可能是空的,也可能不是空的,这取决于作用域,因此,我明确声明@Multibinds,如下所示,以支持文档建议的空映射: @模块 抽象类碎片模块{ @多重绑定 抽象有趣的片段ProviderMap(): 地图 } 但是,此代码产生以下错误消息: 错误:@Multibinds方法必须返回Map或Set 调查Dagger 2的源代码,我发现这是建议: @测试 公共地图{

我的问题是:我试图声明具有以下签名的多重绑定:
Map
。当我的作用域模块中有一个
IntoMap
时,多重绑定会按预期工作。但是,此映射可能是空的,也可能不是空的,这取决于作用域,因此,我明确声明
@Multibinds
,如下所示,以支持文档建议的空映射:

@模块
抽象类碎片模块{
@多重绑定
抽象有趣的片段ProviderMap():
地图
}
但是,此代码产生以下错误消息:

错误:@Multibinds方法必须返回Map或Set

调查Dagger 2的源代码,我发现这是建议:

@测试
公共地图{
assertThatModuleMethod(“@Multibinds抽象映射提供程序映射();”)
.带声明(模块声明)
.hasError(“@Multibinds方法必须返回Map或Set”);
}
为了便于参考,您可以找到此代码

我有两个疑问:

  • 如果Dagger 2支持使用多绑定提供提供者的“非空”映射,那么不允许具有相同签名的空映射的原因是什么

  • 有没有办法绕过此限制并支持
    提供程序的空映射?这将为我节省大量的样板文件和不必要的
    @Inject
    重复


  • 感谢您的关注。

    从单个映射多绑定定义来看,Dagger可以同时注入(Kotlin等价物)
    map
    map

    也许你只是在寻找

    @Multibinds
    抽象有趣的片段ProviderMap():
    地图
    
    ?


    请参阅中的“映射多绑定”和“声明多绑定”。

    有一种可能是,这个
    Map
    只有在它实际上是
    MutableMap
    时才起作用,出于某种原因,Google示例似乎非常喜欢它。