我有一个带有几个实现的接口:
windows
哪些都绑定在我的interface PuNoManager {
fun notifyUser(userId: Int)
}
class FcmManager
@Inject
constructor(val fcmClient: FcmClient) : PuNoManager {
override fun notifyUser(userId: Int) { ... }
}
class ApnsManager
@Inject
constructor(val apnsClient: ApnsClient) : PuNoManager {
override fun notifyUser(userId: Int) { ... }
}
中,以及Module
- 带注释的方法来获取@Provides
:
List<PuNoManager>
当我有一个需要class PuNoModule: AbstractModule() {
override fun configure() {
bind(ApnsManager::class.java)
bind(FcmManager::class.java)
}
@Provides
fun puNoManagers(apnsManager: ApnsManager, fcmManager: FcmManager): List<PuNoManager> {
return listOf(apnsManager, fcmManager)
}
}
的类时出现问题 - Guice抱怨该类型尚未绑定:
List<PuNoManager>
我知道我的Guice设置正常,因为我之前只有Explicit bindings are required and java.util.List<? extends ...PuNoManager> is not explicitly bound.
while locating java.util.List<? extends ...PuNoManager>
并且正在添加第二个ApnsManager
,PuNoManager
。问题源于依赖类请求注入FcmManager
而不仅仅是List<PuNoManager>
。
答案 0 :(得分:1)
List<X>
在JVM上被翻译为java.util.List<? extends X>
。显然,Guice并不支持注入这些值。要避免使用通配符,您可以改用MutableList<X>
,转换为java.util.List<X>
答案 1 :(得分:0)
尝试将@JvmSuppressWildcards
添加到模块类中。