Dagger2 和 Kotlin:@Binds 不适用于 @IntoMap
Dagger2 & Kotlin: @Binds doesn't work with @IntoMap
我正在从这里上课:https://dagger.dev/tutorial/07-two-for-the-price-of-one
当我更改代码时
@Module
abstract class HelloWorldModule {
@Binds
abstract fun helloWorldCommand(command: HelloWorldCommand): Command
}
进入
@Module
abstract class HelloWorldModule {
@Binds
@IntoMap
@StringKey("hello")
abstract fun helloWorldCommand(command: HelloWorldCommand): Command
}
我遇到错误:
error: [Dagger/MissingBinding] Map<String,? extends Command>
cannot be provided without an @Provides-annotated method.
我在这里缺少什么?它不适用于 Kotlin?
谢谢@David Medenjak
,你是对的!
上面的代码没问题,问题是缺少 @JvmSuppressWildcards
,所以我的 class CommandRouter
现在看起来像:
@JvmSuppressWildcards
class CommandRouter @Inject constructor(
val outputter: Outputter,
val commands: Map<String, Command>
) {
// ...
}
我正在从这里上课:https://dagger.dev/tutorial/07-two-for-the-price-of-one
当我更改代码时
@Module
abstract class HelloWorldModule {
@Binds
abstract fun helloWorldCommand(command: HelloWorldCommand): Command
}
进入
@Module
abstract class HelloWorldModule {
@Binds
@IntoMap
@StringKey("hello")
abstract fun helloWorldCommand(command: HelloWorldCommand): Command
}
我遇到错误:
error: [Dagger/MissingBinding] Map<String,? extends Command>
cannot be provided without an @Provides-annotated method.
我在这里缺少什么?它不适用于 Kotlin?
谢谢@David Medenjak
,你是对的!
上面的代码没问题,问题是缺少 @JvmSuppressWildcards
,所以我的 class CommandRouter
现在看起来像:
@JvmSuppressWildcards
class CommandRouter @Inject constructor(
val outputter: Outputter,
val commands: Map<String, Command>
) {
// ...
}