Моя проблема: я пытаюсь объявить мультибинд со следующей подписью: Map<Class<out Fragment>, @JvmSuppressWildcards Provider<Fragment>>
. Multibind работает, как и ожидалось, когда у меня есть IntoMap
внутри моих модулей области видимости. Однако эта карта может быть или не быть пустой в зависимости от области действия, и по этой причине я явно объявляю @Multibinds
, как показано ниже, для поддержки пустых карт в соответствии с документацией:
@Module
abstract class FragmentModule {
@Multibinds
abstract fun fragmentProviderMap():
Map<Class<out Fragment>, @JvmSuppressWildcards Provider<Fragment>>
}
Однако, этот код выдает следующее сообщение об ошибке:
error: методы @Multibinds должны возвращать Map или Set
Изучение исходного кода Dagger 2 Я обнаружил, что это предположительно:
@Test
public void providerMap() {
assertThatModuleMethod("@Multibinds abstract Map<String, Provider<Object>> providerMap();")
.withDeclaration(moduleDeclaration)
.hasError("@Multibinds methods must return Map<K, V> or Set<T>");
}
Для справочных целей вы можете найти этот код здесь .
У меня есть два сомнения:
Если Dagger 2 поддерживает предоставление «непустых» карт Provider<*>
с использованием мультибинд, что может быть причиной, по которой нельзя разрешать пустая карта с такой же подписью?
Есть ли способ обойти это ограничение и поддержать пустые карты Provider<*>
? Это спасло бы меня от большого количества шаблонного и ненужного повторения @Inject
.
Спасибо за ваше внимание.