#java #generics
#java #обобщения
Вопрос:
У меня есть метод, который выглядит следующим образом;
public void update(List<Object> obj);
Я хочу иметь возможность использовать java.lang.reflect.Метод для вызова метода. Кто-нибудь знает, как это сделать?
Ответ №1:
Используйте Class
класс для получения метода:
Class<?> clazz = theObject.getClass();
Method method = clazz.getMethod("update", List.class);
а затем вызовите метод:
method.invoke(theObject, new ArrayList<Object>());
Дженерики удаляются во время выполнения. Они выполняются во время компиляции. Таким образом, вы можете использовать List.class
для ссылки на List<Object>
.
Комментарии:
1. Быстрый вопрос, JB! — Скажем, update (..) возвращенный список как вы собираетесь извлекать возвращенный объект List<?>?
2. Вы должны привести возвращаемый объект к желаемому (известному) типу: Список<?> результат = (Список<?>) метод.invoke(…)
3. Хм! Я делаю точно такое же и получаю пустое значение. Нужно исследовать немного дальше.
Ответ №2:
да, вы можете сделать
myObject.getClass()
.getMethod("update", List.class)
.invoke(myObject, myListOfObject);