Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
05 Апр 2023
2 мин
627

Вызов метода в Java, зная его название в виде строки

Проблема, которая может возникнуть при работе с Java, это необходимость вызвать метод, имя которого дано в виде строки. Предположим, есть две переменные:

Проблема, которая может возникнуть при работе с 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();
}

Объясним, что происходит в этом коде.

  1. Method method = obj.getClass().getMethod(methodName); — получаем объект Method, представляющий метод с именем methodName для класса объекта obj.

  2. String result = (String) method.invoke(obj); — вызываем этот метод для объекта obj и получаем результат. Поскольку известно, что метод возвращает строку, результат приводится к типу String.

Обратите внимание, что этот код может выдать исключения NoSuchMethodException, IllegalAccessException и InvocationTargetException, которые нужно обработать.

Таким образом, с помощью рефлексии можно динамически вызывать методы в Java, зная их имена в виде строк.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий