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 的协方差的情况下初始化地图的任何想法?
解决方案
推荐阅读
- azure - 使用应用注册的邮递员 Azure AAD 令牌请求
- java - 如何创建即使在应用程序关闭并持续通知后仍然存在的后台服务?
- android - 如何在 Flutter 中为平板电脑屏幕设置交错网格
- ios - 为什么我的调试版本中的 iOS 崩溃报告仅部分符号化?
- python - np.astype 不改变数组类型
- c# - 异步元组返回是否有等效的 NotNullWhen C# 模式?
- authentication - NestJS 的 Passport 本地策略“验证”方法从未被调用
- visual-studio-code - 如何为 VSCode 配置 GraphQL 扩展?
- flutter - 排查 Firebase 数据库问题
- google-chrome-extension - 防止将关闭的窗口添加到会话中?