问题描述
我有一个类型参数为 KFunction<*>
的类
(据了解,我会注明我以后要使用的函数类型)
我想要一个类方法采用与 KFunction 相同的参数,并使用这些参数调用订阅者。但是,我不知道如何获取函数参数的类型。 C#中有委托。如何在 Kotlin 中做这样的事情?
我的班级:
class Event<Function: KFunction<*>> {
val subscribers = mutablelistof<Function>()
operator fun plus(increment: Function) {
subscribers.add(increment)
}
// i want arguments as KFunction
operator fun invoke(args: ???) {
subscribers.forEach { it(args) }
}
}
fun c(i: Int) {
println("result of function c: $i")
}
fun main() {
val event = Event<KFunction1<Int,Unit>>()
event + ::c
event(100) // passing arguments Int from KFunction1<Int,Unit>
}
有没有办法完全像这样实现我的想法?
解决方法
因此,暗示作为 Function : KFunction<*>
类型参数(在本例中为 KFunction1<Int,Unit>
)传递的类型将具有自己的类型参数(在本例中为 Int
和 Unit
case),并且您想将 args
参数声明为具有这些确切类型的不确定数量的参数(不包括最后一个,它表示函数调用结果的类型)?
我相信这是不可能的。
您能做的最好的事情是将 args
声明为 vararg
,类型为 Any?
:
operator fun invoke(vararg args: Any?) = subscribers.forEach { it.call(*args) }
,
似乎问题的唯一正常解决方案是只接受一种抽象类型的参数。
x = [list(df.iloc[[0,1,2]].mean()),list(df.iloc[[9,10,11]].mean())]