我有一个返回对象列表的方法,我想通过类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
我该如何解决?
答案 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
更改为您需要的类型。