在Kotlin和Guice中提供通用实例

Bom*_*mbe 8 guice kotlin

我有一个Module提供List<String>使用@Provides注释方法的Guice .

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>>() {})
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,测试失败了:

1) No implementation for java.util.List<? extends java.lang.String> was bound.
  while locating java.util.List<? extends java.lang.String>
Run Code Online (Sandbox Code Playgroud)

现在,这似乎与这个问题相同,但我不知道在哪里添加@JvmSuppressWildcards注释; 将它添加到getStrings()方法不会改变任何东西,因为它增加了objectgetInstance()呼叫.我如何让Guice做我想做的事?

Bom*_*mbe 9

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

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

这是我认为注释实际上有效但最后测试是绿色的最后一个地方.