我有一个私有(private)方法,其标题是:

private fun setNumericListener(editText: EditText, onValueChanged:(newValue: Double?) -> Unit)

我以这种方式调用此方法:setNumericListener(amountEditText, this::onAmountChanged)
我想使用Class中的getDeclaredMethod
https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getDeclaredMethod(java.lang.String,%20java.lang.Class...)以获得对我的私有(private)方法setNumericListener的引用。 getDeclaredMethod接收参数类型为Class<?>... parameterTypes的数组,但是当我的私有(private)方法将方法引用作为参数时,我不知道如何设置参数类型数组。

谢谢

最佳答案

函数引用解析为 kotlin.jvm.functions.Function1 类型。

这意味着您可以通过调用 getDeclaredMethod() 来获取方法引用:

getDeclaredMethod("setNumericListener", EditText::class.java, Function1::class.java)

这是完整的代码段:
fun main(vararg args: String) {
    val method = Test::class.java.getDeclaredMethod("setNumericListener",
            EditText::class.java, Function1::class.java)

    println(method)
}

// Declarations
class Test {
    private fun setNumericListener(editText: EditText,
            onValueChanged: (d: Double?) -> Unit) {}
}

class EditText {}

哪些打印:

private final void Test.setNumericListener(EditText,kotlin.jvm.functions.Function1)

10-06 02:21