Method.invoke的问题

时间:2011-07-21 07:51:56

标签: java reflection invocation

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

答案 0 :(得分:1)

Class<? extends AnObject>  anObject = MyObject.getClass();
Method myMethod = MyObject.getMethod("getListObject"); 
List object = (List)myMethod.invoke(anObject);

答案 1 :(得分:0)

只是强调它:

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

答案 2 :(得分:0)

您可以将结果显式地转换为您想要的类型。

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

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

答案 3 :(得分:0)

dp4j的注释处理器弄清楚怎么样?

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

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

答案 4 :(得分: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();
}

这不起作用,因为方法应该在Accessible之前invoking

runUrlReplacerMethod.setAccessible(true);

答案 5 :(得分:0)

Java 8解决方案:

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

String更改为您需要的类型。