У меня есть карта Котлина, определенная в интерфейсе компонента Dagger, которую я пытаюсь проверить, инициализировав карту с некоторыми поддельными значениями.
Поскольку для карты заданы вложенные универсальные типы значений, компилятор жалуется на неправильную инициализацию.
Вот как карта объявляется в интерфейсе-
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)
Я считаю, что происходит то, что Котлин не может обнаружить, что Provider<ClassInjection<Test1>
может быть включен в карту Provider<ClassInjection<out Any>
.
Он компилируется, если карта объявлена как
Map<Class<out Any>, Provider<out ClassInjection<out Any>>>
Но, к сожалению, с Даггером это не работает.
Любые идеи о том, как инициализировать карту без указания ковариации для ClassInjection?