【发布时间】:2020-06-08 10:39:27
【问题描述】:
现在我正在处理一些关于将函数作为参数传递给带有 vararg 参数和泛型参数的函数的问题。下面的代码适用于一个函数作为其他函数的参数
类似的函数 funA(funB(parameter):return1):return2
但是当我做这样的功能时
funA(vararg funB(参数):return1):return2
它不起作用。我尝试过类似 Array 或 KFunction1
视图模型
fun callMultipleAPI( vararg observable: Observable<Any>):LiveData<Boolean>{
.....
return progressDialogData!!
}
fun callGetTeammateListAPITEST():Observable<Any>{
....
return repo.callGetMessageSumTEST()!!
}
片段
fun test(){
EasyDialog<Observable<Any>,LiveData<Boolean>>(ctx, true,viewModel!!::callGetTeammateListAPITEST,recallFunctionWithFunction = viewModel!!::callMultipleAPI).createNativeNetworkDialog2()
}
EasyDialog
class EasyDialog<T,V> {
var canCancel: Boolean = true
var recallFunction: (() -> T)? = null
var recallFunctionWithValue: ((value: T) -> Unit)? = null
var context: Context? = null
var value: T? = null
var functionPara :(()->T)? = null
var recallFunctionWithFunction:((T) -> V)? = null
constructor(
context: Context?, canCancel: Boolean, value: ()->T, recallFunctionWithFunction: (T) -> V ){
this.context = context
this.canCancel = canCancel
this.functionPara = value
this.recallFunctionWithFunction = recallFunctionWithFunction
}
fun createNativeNetworkDialog2() {
...
functionPara?.let{ functionPara->{ recallFunctionWithFunction?.let {
recallFunctionWithFunction-> compose<T,V>(recallFunctionWithFunction ,functionPara).invoke()
}}}
}
}
fun <T, V> compose( f: (T) -> V, g:() -> T ): () -> V {
return { f(g()) }
}
但它只允许没有可变参数的函数。 我试着做出如下的东西
var functionPara :(()->T)? = null
var recallFunctionWithFunction:( (Array<out T>) -> V)? = null
constructor(
context: Context?, canCancel: Boolean, value: ()->T, recallFunctionWithFunction: (Array<out T>) -> V ){
this.context = context
this.canCancel = canCancel
this.functionPara = value
this.recallFunctionWithFunction = recallFunctionWithFunction
}
fun <T, V> compose( f: (Array<out T>)->V, vararg g:() -> T ): () -> V {
return { f(g()) }
}
但它显示类型不匹配
谁能帮忙?
【问题讨论】:
-
格式化你的代码,无法阅读,或者更好create a Minimal, Reproducible Example
-
我已经说清楚了。谢谢
-
谁能帮忙?
标签: kotlin generics reflection variadic-functions