2017-02-04 7 views
7

У меня есть Guice Module, который предоставляет List<String> с использованием @Provides -носно.Предоставление общего экземпляра в 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>>() {}) 
    } 
} 

Испытание, однако, терпит неудачу с:

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 делать то, что я хочу?

ответ

7

После большого количества проб и ошибок я пришел к этому решению:

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

Это последнее место, я бы подумал, что аннотация на самом деле действует, но вдруг тест был зеленый.

+0

Ничего себе, это же очень удивительно, что здесь принадлежит аннотация –

 Смежные вопросы

  • Нет связанных вопросов^_^