2017-02-04 35 views
7

Mam Guice Module, która zapewnia List<String> przy użyciu metody nieaktywnej @Provides.Udostępnianie ogólnej instancji w Kotlin i 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>>() {}) 
    } 
} 

Badanie jednak nie powiedzie się z:

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

Teraz to wydaje się być taka sama jak this question ale nie mam pojęcia, gdzie dodać @JvmSuppressWildcards adnotacji; dodanie go do metody getStrings() niczego nie zmienia, podobnie jak dodanie go do object w wywołaniu getInstance(). Jak sprawić, by Guice robił, co chcę?

Odpowiedz

7

Po wielu prób i błędów I przybył do tego rozwiązania:

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

To ostatnie miejsce, myślałem, że adnotacja jest rzeczywiście ważne, ale nagle test był zielony.

+0

Wow, sam-bardzo zaskoczony, że tam, gdzie należy adnotacja –