Передача списка в качестве параметра java.lang.reflect.Метод

#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);