我想通过反射调用以下方法,但我有问题指定正确的签名:
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);
它不起作用,因为我使用了"java.util"。当它必须是"List
如果我只使用"java.util。"列表",我有以下错误调用类。getMethod("executeRule",partypes):
NoSuchMethodException: vp.RuleWebXmlContextParamFacesPortletRenderStyles.executeRule(java.util.List, vp.SomethingStrangeFound)
帮忙吗?
注:在调试时,我看到"List
如果两个参数类在编译时都可用,可以这样初始化参数数组:
Class partypes[] = new Class[] { List.class, SomethingStrangeFound.class };
Method meth = cls.getMethod("executeRule", partypes);
这将保证您没有输入错误的限定类名。
如果这仍然不起作用,使用class# getMethods()方法检查类中可用的方法:
for (Method method : cls.getMethods()) {
System.out.println(method);
}
我运行了你的代码,它为我工作。您没有提供cls的定义,但我假设它类似于
Class cls = RuleWebXmlContextParamFacesPortletRenderStyles.class;
因为你得到一个NoSuchMethodException, Class。forName已经成功传递,所以没有打字错误(除非你有多个somethingstrangeffound类,这意味着你得到了错误的包)。
因此,我想到的最后一件事是,也许您在添加有问题的方法之前编译了RuleWebXmlContextParamFacesPortletRenderStyles。清理代码并重新编译。
对于大小为2的partypes, getMethod将搜索一个名为"executeRule"的方法,该方法有两个参数,其中一个类型为"java.util "。列出"和其他类型"vp。SomethingStrangeFound "
但是你的方法只有一个参数。您需要添加第二个类型为"vp"的参数。