无法提供类型为kolin lambda
的{{1}}。但是可以提供(Int) -> Unit
:-例如:-
() -> Unit
错误:-
@Module
class LambdaModule {
@Provides
fun getIntArgLambda(): (Int) -> Unit = {}
@Provides
fun getNoArgLambda(): () -> Unit = {}
@Provides
fun getRecyclerViewAdater(intLambda: (Int) -> Unit, noArg: () -> Unit): CustomAdapter = CustomAdapter(intLambda, noArg)
}
但是,如果我不使用[Dagger/MissingBinding] kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> cannot be provided without an @Provides-annotated method.
,它就会起作用:-
getIntArgLambda()
上面的代码有效:-
为什么我不能为同一
@Provides fun getRecyclerViewAdater(noArg: () -> Unit): CustomAdapter = CustomAdapter({}, noArg)
中的任何方法提供(Int) -> Unit
参数?
答案 0 :(得分:1)
这是一个方差问题。它与Java通配符有关。
功能:
@Provides
fun getIntArgLambda(): (Int) -> Unit = {}
在Java中返回:
kotlin.jvm.functions.Function1<java.lang.Integer, kotlin.Unit>
函数的参数intLambda
:
@Provides
fun getRecyclerViewAdater(intLambda: (Int) -> Unit, noArg: () -> Unit): CustomAdapter = CustomAdapter(intLambda, noArg)
在Java中是:
kotlin.jvm.functions.Function1<? super java.lang.Integer, kotlin.Unit>
要禁止使用通配符,可以使用@JvmSuppressWildcards
:
@Module
class LambdaModule {
@Provides
fun getIntArgLambda(): (Int) -> Unit = {}
@Provides
fun getNoArgLambda(): () -> Unit = {}
@Provides
fun getRecyclerViewAdater(intLambda: Function1<@JvmSuppressWildcards Int, Unit>, noArg: () -> Unit): CustomAdapter = CustomAdapter(intLambda, noArg)
}