【发布时间】: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