2017-02-04 3 views
7

Ich habe eine Guice Module, die eine List<String> unter Verwendung einer @Provides -annotated-Methode bietet.Bereitstellung einer generischen Instanz in Kotlin & 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>>() {}) 
    } 
} 

Der Test schlägt fehl, jedoch mit:

1) No implementation for java.util.List<? extends java.lang.String> was bound. 
    while locating java.util.List<? extends java.lang.String> 

Nun, das ist die gleiche wie this question zu sein scheint, aber ich habe keine Ahnung, wo die @JvmSuppressWildcards Anmerkung hinzuzufügen; Hinzufügen zu der getStrings() Methode ändert nichts, ebenso wie das Hinzufügen zu der object in der getInstance() Aufruf. Wie bekomme ich Guice zu tun, was ich will?

Antwort

7

Nach viel Versuch und Irrtum ich bei dieser Lösung kam:

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

Es ist der letzte Ort ist hätte ich gedacht, dass die Anmerkung tatsächlich gültig ist, aber plötzlich der Test war grün.

+0

Wow, selbe-sehr überrascht, das ist, wo die Annotation gehört –

Verwandte Themen