Problem with Method.invoke



我有一个返回对象列表的方法,我想通过类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

我怎么解决它?

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

直接进行类型转换:

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

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

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

如果该方法没有返回您期望的类型,则可能导致运行时出现ClassCastException

让dp4j的注释处理器解决这个问题怎么样?

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

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

让我看到这个页面的是

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

看看我现在的工作版本

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

Java 8解决方案:

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

String改成你需要的类型

相关内容

最新更新