我有一个Guice Module
,使用List<String>
带注释的方法提供@Provides
。
class TestModule() : Module {
override fun configure(binder: Binder) {}
@Provides fun getStrings(): List<String> = listOf("foo", "bar")
}
class Test {
@Test fun `provider can not deliver`() {
val injector = Guice.createInjector(TestModule())
injector.getInstance(object : Key<List<String>>() {})
}
}
然而,测试失败了:
1) No implementation for java.util.List<? extends java.lang.String> was bound.
while locating java.util.List<? extends java.lang.String>
现在,这似乎与this question相同,但我不知道在哪里添加@JvmSuppressWildcards
注释;将其添加到getStrings()
方法不会改变任何内容,将其添加到object
调用中的getInstance()
也是如此。如何让Guice做我想做的事?
答案 0 :(得分:9)
经过大量的反复试验,我得出了这个解决方案:
@Test
fun `provider can not deliver`() {
val injector = Guice.createInjector(TestModule())
injector.getInstance(object : Key<List<@JvmSuppressWildcards String>>() {})
}
这是我认为注释实际上有效的最后一个地方,但突然间测试是绿色的。