我发布了这个this问题,这基本上等于尝试将字符串映射到Java中的函数。我试图通过创建HashMap <String, Method>
来解决它,但每次我尝试运行Method.invoke(this,args),其中args是一个对应于Method参数的Objects数组,我得到一个{{ 1}}。我在NullPointerException
中声明了方法,如下所示:HashMap
,其中mypackage.MyClass.class.getMethod ("methodName", args)
是args
对象的数组,对应于Class
的参数。我一直在研究这个问题几个小时,我开始变得非常沮丧。如果有人有任何建议我会非常感激!
methodName
答案 0 :(得分:2)
处理反射时,你需要非常小心。
Class
参数必须与您要搜索的method
声明完全匹配。
例如,如果您的method
interface
MyAwesomeInterface
interface
,并且您MyAwesomeImplementation
中的class
实施了MyAwesomeImplementation
,则无法使用getClass().getMethod("doAwesomeness", new Class[] {MyAwesomeImplementation.class});
查找方法时MyAwesomeInterface.class
的{{1}}引用。
例如
public String methodToBeInvoked(String value, int iValue) {
return "You said " + value + " with " + iValue;
}
public MethodInvocation() {
Map<String, Method> myMethods = new HashMap<String, Method>(25);
try {
Method method = getClass().getMethod("methodToBeInvoked", new Class[]{String.class, int.class});
myMethods.put("invoke", method);
System.out.println(myMethods.get("invoke").invoke(this, "Hello", 100));
} catch (Exception exp) {
exp.printStackTrace();
}
}
不行。它需要class
我把这个小例子放在一起,它工作正常
method
我怀疑用于查找方法的null
参数与方法声明不匹配。
查看时{{1}}不是{{1}}&amp;当你尝试&amp;从地图中拉出来,它将有助于缩小问题范围
答案 1 :(得分:1)
虽然未显示myTests
地图的人口,但显然不包含导致NPE的测试方法thisTest
。
这里要做的第一件事是检查此Map的内容以确保它包含所请求的密钥。
此外,在您尝试调用该方法以防止它爆炸之前,值thisTest
{{1}}值得。
答案 2 :(得分:1)
此行只能在thisResult为null的情况下生成NPE,这反过来意味着thisKey未在myTests中初始化。使用“aKey”而不是thisKey它应该可以工作。