使用嵌套泛型初始化Kotlin地图

时间:2019-06-04 20:44:00

标签: generics kotlin

我在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协方差的情况下初始化地图的任何想法?

0 个答案:

没有答案