Java Reflection API:getMethod()工作正常,调用失败

时间:2014-02-07 08:46:08

标签: java android reflection

我认为我在很深层次上误解了Java反思。我已经记录了我的方法(包括它应该作为参数的内容),以及我传递的内容并且它们完美匹配。 getMethod()显然正在检索正确的方法,但是当我调用它时,它会给我NoSuchMethodException错误。

我使用此调用定位createsession。

protected void onHandleIntent(Intent i){
    String methodName = i.getStringExtra("methodName");
    String[] data = i.getStringArrayExtra("data");

    Method m = null;
    try{
        MyClass c = new MyClass();
        m = c.getClass().getMethod(methodName, String[].class);
        Log.v("this works", "This is printed, no problem");
        m.invoke(c, data);
        Log.v("this does not", "will not be printed");
    } catch(Exception NoSuchMethodException){
        Log.v("nosuchmethod", methodName + " was not found");
    }
}

public void createsession(String[] data)
    {
        System.out.println(data[0]);
    }

这是我在使用.toString()打印出我的Method对象后得到的内容是通过getMethod分配的:

method﹕ public void com.myPackage.myApp.MyClass.createsession(java.lang.String[])

这让我觉得getMethod不是问题区域,因为它会返回所有正确的信息......

修改的 这一直在运作......

问题是try块现在负责它或我调用()生成的任何函数的所有异常。在这种程度上,当被调用的函数本身返回异常时,invoke方法将其解释为它真正知道的唯一失败:“NoSuchMethodException”。我看到NoSuchMethodExceptions只是在被调用的方法中进入错误的catch块的NullPointerException。

我想我会永远留下这个问题并且无法回答,作为花费数小时的公平警告。我觉得这对其他人来说可能是一段有用的知识。

1 个答案:

答案 0 :(得分:0)

无需创建新实例。 试试这个

    m = MyClass.class.getMethod(methodName, String[].class);
    Log.v("this works", "This is printed, no problem");
    m.invoke(this, data);
    Log.v("this does not", "will not be printed");