我有一个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做我想做的事?

最佳答案

经过大量的反复试验,我得出了以下解决方案:

@Test
fun `provider can not deliver`() {
  val injector = Guice.createInjector(TestModule())
  injector.getInstance(object : Key<List<@JvmSuppressWildcards String>>() {})
}

这是我会认为注解实际上是有效的最后一个地方,但突然间测试呈绿色。

关于guice - 在Kotlin&Guice中提供通用实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42038982/

10-12 06:25