我想在处理中创建一个简单的方法队列,并尝试使用Java的本机反射来完成。为什么getDeclaredMethod()
在此示例中不起作用?有办法使它起作用吗?无论我尝试过哪种变化,它总是返回NoSuchMethodException
...
import java.lang.reflect.Method;
void draw() {
Testclass t = new Testclass();
Class myClass = t.getClass();
println("Class: " + myClass);
// This doesn't work...
Method m = myClass.getDeclaredMethod("doSomething");
// This works just fine...
println(myClass.getDeclaredMethods());
exit();
}
// Some fake class...
class Testclass {
Testclass() {
}
public void doSomething() {
println("hi");
}
}
最佳答案
我不认为它会返回NoSuchMethodException
。您看到的错误是:Unhandled exception type NoSuchMethodException
您会看到这是因为getDeclaredMethod()
可以抛出NoSuchMethodException
,因此您必须将其放入try-catch块中。
换句话说,您没有得到NoSuchMethodException
。由于没有将getDeclaredMethod()
包装在try-catch块中,因此出现编译器错误。要解决此问题,只需在对getDeclaredMethod()
的调用周围添加一个try-catch块。
try{
Method m = myClass.getDeclaredMethod("doSomething");
println("doSomething: " + m);
}
catch(NoSuchMethodException e){
e.printStackTrace();
}