Guice MapBinder

Я использую Guice в проекте Java + Kotlin, чтобы внедрить карту реализации алгоритма в конкретный компонент, но я продолжаю получать

1) No implementation for java.util.Map<java.lang.String, ? extends com.scherule.scheduling.algorithms.SchedulingAlgorithm> annotated with @com.google.inject.name.Named(value=scheduling.algorithms) was bound. while locating java.util.Map<java.lang.String, ? extends com.scherule.scheduling.algorithms.SchedulingAlgorithm> annotated with @com.google.inject.name.Named(value=scheduling.algorithms) for the 2nd parameter of com.scherule.scheduling.SchedulingJobConsumer.<init>(SchedulingJobConsumer.kt:17) while locating com.scherule.scheduling.SchedulingJobConsumer 

Определение модуля определяется следующим образом:

 class AlgorithmsModule : AbstractModule() { override fun configure() { MapBinder.newMapBinder(binder(), String::class.java, SchedulingAlgorithm::class.java, Names.named("scheduling.algorithms") ).addBinding("interval-projection").toInstance(IntervalProjectionAlgorithm()) } } 

И код вызывающего абонента:

 @Singleton class SchedulingJobConsumer @Inject constructor( @Named("scheduling.channel") channel: Channel, @Named("scheduling.algorithms") val schedulers: Map<String, SchedulingAlgorithm> ) : DefaultConsumer(channel) ... 

Но когда я сделаю

 injector.getInstance(Key.get(new TypeLiteral<Map<String, SchedulingAlgorithm>>() {}, named("scheduling.algorithms"))) 

это там. Что не так?

Проблема в том, что Kotlin Generics! = Java Generics.

Этот котлинский код.

  @Named("scheduling.algorithms") val schedulers: Map<String, SchedulingAlgorithm> 

Получает скомпилированный

 Map<String, ? extends SchedulingAlgorithm> and not Map<String, SchedulingAlgorithm> 

При инъекции Guice ищет Map<String, ? extends SchedulingAlgorithm> Map<String, ? extends SchedulingAlgorithm> для которого он не имеет привязки, поскольку MapBinder создал привязку для Map<String, SchedulingAlgorithm> .

Intereting Posts
Как объявить переменные в Android (Kotlin) с помощью стиля кода Google? Как отладить ошибку «Не удалось разрешить ошибку com.google.android:android» в Anko Целевые аннотации с использованием сайта недоступны с отражением Котлина Фрагмент isDetached условный не запускается, хотя фрагмент, безусловно, отсоединен Java generics в Kotlin: используйте Java raw type в качестве параметра метода в Kotlin Как сохранить запись в Apache Jena? Заявление о создании платформы с сопоставимым Неправильная позиция PopupWindow внутри RecyclerView после notifyItemChanged disable: Сканирование аннотаций kotlin Поддерживает ли Котлин монадическое понимание? Оператор «Когда» и «switch» оператора Java Android, Gradle, Realm, Kotlin: Ошибка: ошибка: не удалось найти файл AndroidManifest.xml Статические переменные в Котлине по-прежнему являются частью экземпляров объектов msg: Невозможно найти getter для атрибута 'android: text' со значением типа java.lang.String в привязке данных? Как вы пишете вторичные конструкторы для класса с параметрами типа?