我陷入了有关Kotlin中generic
类型的一些问题。本来,我想用值和调用函数来调用函数。所以我在下面写下,但是该值只允许我传递类似string / Int这样的类型。我想在回调函数中将函数作为参数传递。
ClassA
ClassA<T>{
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) -> Unit)? = null
constructor(context: Context?, canCancel: Boolean, value: T, recallFunctionWithValue: (value: T) -> Unit) {
this.context = context
this.canCancel = canCancel
this.value = value
this.recallFunctionWithValue = recallFunctionWithValue
}
}
ClassB
ClassA(ctx, true,viewModel!!::testRefInside,viewModel!!::testRefOutside).createNativeNetworkDialog()
ViewModel
fun testRefOutside(test: Observable<Any>? ){
}
fun testRefInside():Observable<Any>?{
return null
}
我尝试做类似的事情
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) -> Unit)? = null
constructor(context: Context?, canCancel: Boolean, value: () -> T, recallFunctionWithValue: (value: ()->T) -> Unit) {
this.context = context
this.canCancel = canCancel
this.functionPara = value
this.recallFunctionWithFunction = recallFunctionWithValue
}
但是它显示语法错误。有人可以帮忙吗?
语法错误
构造函数要为函数使用的两个参数(分别为value
和recallFunctionWithValue
)
() -> T
和
(() -> T) -> Unit
您通过viewModel::testRefInside
作为第一个。 testRefInside
是一个
() -> Observable<Any>?
所以T
推断为Observable<Any>?
然后您将viewModel::testRefOutside
作为第二个参数传递。基于T
是,期望a
(() -> Observable<Any>?) -> Unit
但是testRefOutside
是a
Observable<Any>? -> Unit
所以它们不匹配。