我想在处理中创建一个简单的方法队列,并尝试使用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();
  }

10-06 06:53