【发布时间】:2013-05-15 11:11:36
【问题描述】:
我想通过反射调用以下方法,但我无法指定正确的签名:
public void executeRule(List<Node> params, SomethingStrangeFound callMeBack) throws IOException
{
...
}
我尝试过这样的事情:
Class partypes[] = new Class[2];
partypes[0] = Class.forName("java.util.List");
partypes[1] = Class.forName("vp.SomethingStrangeFound");
Method meth = cls.getMethod("executeRule", partypes);
它不起作用,因为当它必须是“List
如果我只使用“java.util.List”,调用 cls.getMethod("executeRule", partypes) 时会出现以下错误:
NoSuchMethodException: vp.RuleWebXmlContextParamFacesPortletRenderStyles.executeRule(java.util.List, vp.SomethingStrangeFound)
有什么帮助吗?
附:
在调试时,我看到“List
但这对我没有帮助。
【问题讨论】:
-
在运行时,由于类型擦除,它将是
java.util.List,所以它一定不是问题。 -
partypes数组的长度应等于 1,您也可以将代码简化为Class partypes[] = new Class[]{List.class}; -
@Luiggi 这给我带来了一个问题,因为当我调用 getMethod("executeRule", partypes) 时,我收到一个异常:NoSuchMethodException,因为类型不同。
-
@hoaz 我在帖子中丢失了一行代码,我现在添加了:)
-
Luiggi 和 Hoaz 都是对的。
标签: java generics reflection