0
我使用吉斯在Java中+科特林项目注入算法实现的地图到一个特定的bean,但我不断收到吉斯MapBinder
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")))
它在那里。怎么了?
尝试在'val schedulers'的声明中添加'@ JvmSuppressWildcards'注释 – yole
将它添加到构造函数声明中不会改变任何内容。在字段上执行此操作会将错误消息修改为java.util.Map的No实现(...)所以它似乎甚至找不到它。 –
kboom
错误消息似乎说它找不到SchedulingAlgorithm的实现。那是如何定义的? – Les