-1

我有一个返回对象列表的方法,我想通过类 Method 的调用方法来调用它。唯一的问题是调用方法返回一个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

我该如何解决?

4

6 回答 6

1
Class<? extends AnObject>  anObject = MyObject.getClass();
Method myMethod = MyObject.getMethod("getListObject"); 
List object = (List)myMethod.invoke(anObject);
于 2011-07-21T07:55:05.647 回答
0

只需键入它:

List list = (List)method.invoke(...);
于 2011-07-21T07:54:32.117 回答
0

dp4j的注释处理器弄清楚如何?

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

您还可以使用 打印注入的代码-Averbose=true

于 2011-07-25T19:28:58.627 回答
0

您可以将结果显式转换为所需的类型。

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

ClassCastException如果方法没有返回您期望的类型,这可能会导致运行时错误。

于 2011-07-21T07:55:30.010 回答
0

让我进入这个页面的是

当我尝试调用受保护的方法而不使其可访问时

看看我现在的工作版本

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();
}

这不起作用,因为方法应该Accessibleinvoking它之前

runUrlReplacerMethod.setAccessible(true);
于 2017-03-15T18:13:04.140 回答
0

Java 8 解决方案:

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

更改String为您需要的类型。

于 2017-05-04T17:28:39.137 回答