Каким способом с помощью рефлексии можно вызвать метод по его названию из определенной области классов? Или из любого класса наследника базового класса?
Если вызывать метод с помощью конструкции this.GetClass().getDeclaredMethod().Invoke(), то поиск ведется только в этом классе, а не как написано в некоторых туториалах — в классах потомках.
Для вызова статических методов в классах родителях можете использовать следующий код:
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'ом, после чего их отфильтровать и вызвать то что нужно.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости