首页 > 解决方案 > 使用嵌套泛型初始化 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 的协方差的情况下初始化地图的任何想法?

标签: genericskotlin

解决方案


推荐阅读