在将匕首接口从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>
),但在Java中不是Map
。您的函数将生成如下所示:
Config provideHubsConfig(Map<String, ? extends CommandHandler> commandRegistry) { ... }
但是匕首恰好提供了Map<String, CommandHandler>
。因此,我们需要使用@JvmSuppressWildcards
commandRegistry: Map<String, @JvmSuppressWildcards CommandHandler>