Вызов метода с помощью рефлексии

285
01 декабря 2017, 05:28

Каким способом с помощью рефлексии можно вызвать метод по его названию из определенной области классов? Или из любого класса наследника базового класса?

Если вызывать метод с помощью конструкции this.GetClass().getDeclaredMethod().Invoke(), то поиск ведется только в этом классе, а не как написано в некоторых туториалах — в классах потомках.

Answer 1

Для вызова статических методов в классах родителях можете использовать следующий код:

public static <T> void invoke(Class<T> type, Class<? super T> parent, String methodName) throws Exception {
    Class<?> currentType = type;
    while (currentType != Object.class) {
        Method method = currentType.getDeclaredMethod(methodName);
        if (method != null && method.getDeclaringClass() == parent) {
            method.invoke(null);
            return;
        }
        currentType = currentType.getSuperclass();
    }
}

Но это работает только для статических методов, т.к. в reflection нет способа для обхода полиморфизма. Т.е. нельзя вызвать определенный метод в классе родителе, если он был переопределен в классе потомке.

Если же вы хотите вызвать методы в классах потомках, то здесь аналогичный подход. Нужно получить все классы загруженные определенным ClassLoader'ом, после чего их отфильтровать и вызвать то что нужно.

READ ALSO
Установка паттерна даты jstl

Установка паттерна даты jstl

Кто знает в чем проблема, вывожу данные на jsp страницу в таком виде <td><%=pListget(3)%></td> все хорошо отрабатывает, пытаюсь установить паттерн...

231
Не находит файл в jar classpath

Не находит файл в jar classpath

Скомпилировал программуВ самом корне classpath лежит файл

238
Фильтрация входящих данных из EditText в Android

Фильтрация входящих данных из EditText в Android

В приложении для Android имеется активити с полями для ввода данныхОдно из них EditText с inputType=textCapWords, а другое EditText с inputType=number

246
JavaFX Фильтр таблицы

JavaFX Фильтр таблицы

Проект JavaFX2Как можно реализовать фильтр по нажатию на название колонки и соотвественно чтобы по значениях этой колонки оно фильтровало?...

237