Java:Method.invoke(this,args)NullPointerException

时间:2012-08-14 21:10:33

标签: java nullpointerexception

我发布了这个this问题,这基本上等于尝试将字符串映射到Java中的函数。我试图通过创建HashMap <String, Method>来解决它,但每次我尝试运行Method.invoke(this,args),其中args是一个对应于Method参数的Objects数组,我得到一个{{ 1}}。我在NullPointerException中声明了方法,如下所示:HashMap,其中mypackage.MyClass.class.getMethod ("methodName", args)args对象的数组,对应于Class的参数。我一直在研究这个问题几个小时,我开始变得非常沮丧。如果有人有任何建议我会非常感激!

methodName

3 个答案:

答案 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它应该可以工作。