2017-03-31 105 views
7

我在我的匕首下面的代碼片段2模塊匕首2個multibindings與科特林

@Singleton 
@Provides 
@ElementsIntoSet 
fun providesQueries(foo: Foo): Set<Foo>{ 
    val queries = LinkedHashSet<Foo>() 
    queries.add(foo) 
    return queries 
} 

我嘗試以這種方式

@Inject lateinit var foo: Set<Foo> 

注入到但匕首表明它說,匕首不能出錯提供不帶@Provides或@Produces方法的java.util.Set。

我在java中做了同樣的工作。有人知道它爲什麼失敗嗎?

+0

什麼註釋處理器您使用? – azizbekian

+0

我使用kapt。我在build.gradle中有以下幾行。 kapt 「com.google.dagger:匕首編譯:$ dagger_version」 kapt { generateStubs =真 } – Borja

+0

比較生成的Java類和科特林生成的類,看到了差異。顯然生成的類錯過@Produces。 – azizbekian

回答

17

因爲它在科特林reference

描述爲使科特林的API在Java中的工作,我們產生了協變定義Box(或Foo<? super Bar>爲 contravariantly定義的Foo),當它表現爲一個參數Box<Super>作爲 Box<? extends Super>

可以使用@JvmSuppressWildcards避免它,就像下面:

@Inject lateinit var foo: Set<@JvmSuppressWildcards Foo> 
+0

MutableSet <>也可以使用 – Borja