如何在Guice中绑定Kotlin函数
我的Kotlin课程与此类似:如何在Guice中绑定Kotlin函数,kotlin,guice,Kotlin,Guice,我的Kotlin课程与此类似: class MyClass @Inject constructor(val work: (Int) -> Unit)) { ... } 绑定和@提供的都不起作用: class FunctionModule : AbstractModule() { override fun configure() { bind(object : TypeLiteral<Function1<Int, Unit>>() {}).
class MyClass @Inject constructor(val work: (Int) -> Unit)) { ... }
绑定
和@提供的
都不起作用:
class FunctionModule : AbstractModule() {
override fun configure() {
bind(object : TypeLiteral<Function1<Int, Unit>>() {}).toInstance({})
}
@Provides
fun workFunction(): (Int) -> Unit = { Unit }
}
}
class FunctionModule:AbstractModule(){
覆盖乐趣配置(){
绑定(对象:TypeLiteral(){}).toInstance({})
}
@提供
fun workFunction():(Int)->Unit={Unit}
}
}
我不断得到错误:
kotlin.jvm.functions.Function1没有实现?super java.lang.Integer,kotlin.Unit>已绑定
如何使用Guice为Kotlin函数注入实现?如果您将注入
Function1
,而不是(Int)->Unit
?tl;dr-用途:
bind(object : TypeLiteral<Function1<Int, @JvmSuppressWildcards Unit>>() {})
.toInstance({})
参数work
的类型(至少根据Guice)为:
kotlin.jvm.functions.function1注意,{Unit}
可以用{}
简化,这就是绑定(object:TypeLiteral(){})的作用。问题中显示了它产生的错误。
class MyClass @Inject constructor(val work: (Int) -> Unit)) { ... }
kotlin.jvm.functions.Function1<? super java.lang.Integer, kotlin.Unit>
bind(object : TypeLiteral<Function1<Int, Unit>>() {}).toInstance({})