【问题标题】:Java Reflection API: getMethod() works fine, invoke failsJava 反射 API:getMethod() 工作正常,调用失败
【发布时间】:2014-02-07 08:46:07
【问题描述】:

我认为我在相当深的层面上对 Java 反射有一些误解。我已经记录了我的方法是什么(包括它应该作为参数的内容),以及我传入的内容,它们完美匹配。 getMethod() 显然是在检索正确的方法,但是当我调用它时,它给了我 NoSuchMethodException 错误。

我的目标是使用此调用创建会话。

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 只是被调用方法中的 NullPointerException 进入了错误的 catch 块。

我想我会一直搁置这个问题,永远得不到答案,作为对所花费时间的公平警告。我觉得这可能是对其他人有用的知识。

【问题讨论】:

  • 你的目标方法是私有的还是不是?确保你的方法是公开的!
  • 对不起,我应该澄清一下:createsession 目标方法。
  • 哦,我明白了它确实是公开的......操作〜我不知道〜一切似乎都很好
  • 你的 MyClass 是什么? OnHandleIntent 也是 Myclass 的方法?
  • 是的,也是如此。我没有发布大部分课程,但所有这些都包含在 MyClass 中。

标签: java android reflection


【解决方案1】:

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

    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");

【讨论】:

  • 这并没有解决我的问题。我确实认为这可能是获取方法名称、最佳实践和所有内容的更好方法。然而,我仍然在同一条船上。
  • 我刚才修改了一下。试试
  • 恐怕还是不行...该方法找到正确,但调用时总是抛出异常。
  • 太有趣了!我在一个活动类中测试上面的代码。它可以正常工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2019-08-07
  • 2017-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-15
相关资源
最近更新 更多