我在Dagger组件接口上定义了Kotlin映射,我正在尝试通过使用一些假值初始化映射来进行测试。 由于映射是使用嵌套的泛型类型定义的,因此编译器会抱怨初始化不正确。
这是在接口上声明地图的方式-
interface ClassInjectionHolder {
fun classInjections(): Map<Class<out Any>, Provider<ClassInjection<out Any>>>
}
以下是我尝试初始化此地图的方式-
private val injectionMap = mutableMapOf<Class<out Any>, Provider<ClassInjection<out Any>>>()
@Mock private lateinit var mockInjectionProvider1: Provider<ClassInjection<Test1>>
injectionMap.put(Test1::class.java, mockInjectionProvider1) // doesn't work
private val injectionMap = mapOf<Class<out Any>, Provider<ClassInjection<out Any>>>(Test1::class.java to mockInjectionProvider1)
我相信正在发生的事情是Kotlin无法检测到Provider<ClassInjection<Test1>
可以包含在Provider<ClassInjection<out Any>
的地图中。
如果将地图声明为-
Map<Class<out Any>, Provider<out ClassInjection<out Any>>>
但不幸的是,这对于Dagger来说效果不佳。 关于如何在不指定ClassInjection协方差的情况下初始化地图的任何想法?