Найти метод с не полностью известной подписью через отражение - PullRequest
0 голосов
/ 27 сентября 2018

Вы получите один результат, если попытаетесь найти метод по его сигнатуре (список имен и типов параметров):

Method java.lang.Class.getMethod(String name, Class<?>... parameterTypes)

Допустим, я знаю длину параметра typeTypes и все, кроме одного типа параметра, потому что я могуне получить класс параметра, когда он был пустым, передан мне во время выполнения.
Поэтому я хочу получить все методы по имени метода и массиву известных типов параметров.Если случится, что результатом будет одиночный метод, я его назову, иначе я сгенерирую исключение.

Есть ли прекрасный способ сделать это, не реализовав повторно JDK 'getMethod'?

1 Ответ

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

Единственный способ получить такой метод - использовать getMethods() и отфильтровать его вручную, это не так сложно, всего несколько простых проверок для каждого метода.

но, если вам просто нужно вызватьметод, который вы можете использовать более динамичным способом (но он также будет медленнее, поскольку вы не можете кэшировать Method экземпляр)

public static void main(String[] args) throws Exception {
    Expression someMethod = new Expression(Tezd.class, "someMethod", new Object[]{1, 2, null, "huh"});
    someMethod.execute();
    System.out.println(someMethod.getValue());
}

public static String someMethod(int a, int b, Object object, String str) {
    return a + ", " + b + ", " + object + ", " + str;
}

Первый аргумент - это цель, я использовал класс, так как это статический метод,для обычного метода просто передайте объект здесь.

К сожалению, метод, используемый java.beans.Expression для получения соответствующего метода, не является открытым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...