kotlin泛型函数作为参数

问题描述 投票:0回答:1

我陷入了有关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
}

但是它显示语法错误。有人可以帮忙吗?

语法错误

Error

Error2

Error show in this place only RYEasyDialog means ClassA

generics kotlin lambda
1个回答
0
投票

构造函数要为函数使用的两个参数(分别为valuerecallFunctionWithValue

() -> T

(() -> T) -> Unit

您通过viewModel::testRefInside作为第一个。 testRefInside是一个

() -> Observable<Any>?

所以T推断为Observable<Any>?

然后您将viewModel::testRefOutside作为第二个参数传递。基于T是,期望a

(() -> Observable<Any>?) -> Unit

但是testRefOutside是a

 Observable<Any>? -> Unit

所以它们不匹配。

© www.soinside.com 2019 - 2024. All rights reserved.