Инициализация карты котлина с вложенными обобщениями - PullRequest
1 голос
/ 04 июня 2019

У меня есть карта Котлина, определенная в интерфейсе компонента 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...