在 Kotlin & Guice 中提供通用实例

Providing a generic instance in Kotlin & Guice

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

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>

现在,这似乎与 相同,但我不知道在哪里添加 @JvmSuppressWildcards 注释;将它添加到 getStrings() 方法不会改变任何东西,将它添加到 getInstance() 调用中的 object 也是如此。我如何让 Guice 做我想做的事?

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

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

这是我最后一个想到注解实际上有效的地方,但突然测试是绿色的。