将 dagger 接口从 java 转换为 Kotlin 时遇到一些问题
我得到 [Dagger/MissingBinding] java.util.Map 如果没有 @Provides 注释的方法就无法提供。
这是我的界面
interface TopicConfigModule {
@Binds
@IntoMap
@StringKey(NAME)
fun bindCommandHandler(handler: TopicCommandHandler): CommandHandler
companion object {
@JvmStatic
@Provides
@FragmentScope
fun provideHubsConfig(
commandRegistry: Map<String, CommandHandler>
): Config {
return ...
}
}
}
CommandHandler是java接口
public interface HubsCommandHandler {```}
Map
在 Kotlin 中是协变的 (variance) 其值类型 (public interface Map<K, out V>
), but Map
在Java中则不然。您的函数将被翻译为
Config provideHubsConfig(Map<String, ? extends CommandHandler> commandRegistry) { ... }
但匕首恰恰提供了Map<String, CommandHandler>
。所以我们需要抑制通配符@JvmSuppressWildcards
commandRegistry: Map<String, @JvmSuppressWildcards CommandHandler>
从 Java 调用 Kotlin - 变体泛型
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)