Проблема с Method.invoke - PullRequest
       13

Проблема с Method.invoke

0 голосов
/ 21 июля 2011

У меня есть метод, который возвращает список объектов, и я хочу вызвать его методом invoke класса Method. Единственная проблема заключается в том, что метод invoke возвращает Object, а не list<Object>.

Код здесь:

Class<? extends AnObject> anObject = MyObject.getClass();
Method myMethod = MyObject.getMethod("getListObject"); 
Object objject = method.invoke(MyObject); // I want it to return list

Как я могу это решить?

Ответы [ 6 ]

1 голос
/ 21 июля 2011
Class<? extends AnObject>  anObject = MyObject.getClass();
Method myMethod = MyObject.getMethod("getListObject"); 
List object = (List)myMethod.invoke(anObject);
0 голосов
/ 04 мая 2017

Решение Java 8:

List<?> list = (List) invokeResult;
List<String> = list.stream().map(el -> (String) el).collect(Collectors.toList());

Измените String на нужный вам тип.

0 голосов
/ 15 марта 2017

что дало мне на эту страницу

когда я пытался вызвать защищенный метод, не делая его доступным

взгляните на мою рабочую версию

DoPubService service = SpringAdapter.getBean("frontendDoPubService", DoPubService.class);
try {
    Method runUrlReplacerMethod = service.getClass().getDeclaredMethod("runUrlReplacer", String.class, String.class, String.class);

    return runUrlReplacerMethod.invoke(service, "10.21019/qna-900031", "abs", explanation);
 } catch (Exception e) {
    e.printStackTrace();
}

это не работает, потому что метод должен быть Accessible до invoking it

runUrlReplacerMethod.setAccessible(true);
0 голосов
/ 25 июля 2011

Как насчет того, чтобы обработчик аннотаций dp4j понял это?

@com.dp4j.Reflect //or @org.junit.Test
public void test(){
  Object objject =  MyObject.getListObject();
}

Вы также можете распечатать введенный код с помощью -Averbose=true.

0 голосов
/ 21 июля 2011

Вы можете явно привести результат к желаемому типу.

List<?> theList = (List<?>) method.invoke(anObject, new Object[] {})

Это может привести к ClassCastException во время выполнения, если метод не возвращает ожидаемый тип.

0 голосов
/ 21 июля 2011

Просто введите его:

List list = (List)method.invoke(...);
...