Используйте getdeclaredmethod, используя функцию в качестве параметраtype

У меня есть частный метод с заголовком:

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

Я называю этот метод так: setNumericListener(amountEditText, this::onAmountChanged)

Я хотел бы использовать getDeclaredMethod из класса https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getDeclaredMethod (java.lang.String,% 20java.lang.Class ...), чтобы получить ссылку на мой частный метод setNumericListener. getDeclaredMethod принимает массив типов параметров Class<?>... parameterTypes, но я понятия не имею, как установить массив типов параметров, когда мой частный метод имеет ссылку на метод в качестве параметра.

Спасибо

5
0
972
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ссылка на функцию определяется как имеющая тип 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)

Другие вопросы по теме