Используйте getDeclaredMethod, используя функцию в качестве параметраType - PullRequest
0 голосов
/ 10 сентября 2018

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

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, но я понятия не имею, как установить массив типов параметров, когда мой частный метод имеет ссылку на метод в качестве параметра.

Спасибо

1 Ответ

0 голосов
/ 10 сентября 2018

Ссылка на функцию разрешается как тип 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...