通过反射调用泛型类中的方法

agg*_*ton 1 generics reflection kotlin

我正在尝试设置一个接受通用类的函数,该函数又通过反射调用该类中的方法。下面的代码可以编译,但是当我运行它时,我收到此错误:

java.lang.IllegalArgumentException: Callable expects 2 arguments, but 1 were provided.
Run Code Online (Sandbox Code Playgroud)

为什么 Kotlin 声称应该有 2 个参数,而该方法只接受一个参数?论据应该是什么?

import kotlin.reflect.full.memberFunctions


class myClass {
    fun test(d: String) : String {
        return d
    }
}

class test {

    fun <T: Any>ProcessStuff(
        d : T
    ) {
        val myClass  = d.let { it::class }

        var f3 = myClass.memberFunctions.find { it.name == "test"}!!
        println (f3.call ("Hello World"))
    }
}

fun main(args : Array<String>) {
    val c = myClass()
    val t = test()
    t.ProcessStuff(c)
}
Run Code Online (Sandbox Code Playgroud)

小智 5

您没有在实例上调用该方法(第一个参数)。它的工作原理如下:

val myClassInstance = myClass()
println(f3.call(myClassInstance, "Hello World"))
Run Code Online (Sandbox Code Playgroud)

  • 好吧,在本例中实例是“d”。 (2认同)