Проблема, которая может возникнуть при работе с Java, это необходимость вызвать метод, имя которого дано в виде строки. Предположим, есть две переменные:
Object obj; String methodName = "getName";
Задача состоит в том, чтобы вызвать метод, указанный в переменной methodName
, для объекта obj
, не зная заранее класс этого объекта.
Предположим, что метод, который нужно вызвать, не принимает параметров и возвращает строку. Это типичный геттер для Java-бина.
Для решения этой задачи можно воспользоваться механизмом рефлексии в Java. Рефлексия позволяет исследовать информацию о классах, интерфейсах, полях и методах во время исполнения программы, а также вызывать методы и создавать новые объекты.
Вот как это можно сделать:
try { Method method = obj.getClass().getMethod(methodName); String result = (String) method.invoke(obj); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); }
Объясним, что происходит в этом коде.
-
Method method = obj.getClass().getMethod(methodName);
— получаем объектMethod
, представляющий метод с именемmethodName
для класса объектаobj
. -
String result = (String) method.invoke(obj);
— вызываем этот метод для объектаobj
и получаем результат. Поскольку известно, что метод возвращает строку, результат приводится к типуString
.
Обратите внимание, что этот код может выдать исключения NoSuchMethodException
, IllegalAccessException
и InvocationTargetException
, которые нужно обработать.
Таким образом, с помощью рефлексии можно динамически вызывать методы в Java, зная их имена в виде строк.
Добавить комментарий