Java反射,来自superClass的调用方法?

JDe*_*Dev 0 java reflection

我见过很多例子,我知道讨论的内容.我做的一切都很正确,但我收到了一个错误.这是为什么?我究竟做错了什么?

Class superClass = rootObject.getSuperclass();
      Method addErrorMethod = superClass.getDeclaredMethod("addErrorMessage", ErrorType.class, String.class, String.class, String.class);
      _log.info(addErrorMethod.getName());
      addErrorMethod.invoke(superClass, ErrorType.FIELD, propertyName, message, "");
Run Code Online (Sandbox Code Playgroud)

我得到方法,但当你打电话给调用者.我收到以下错误.

 java.lang.IllegalArgumentException: object is not an instance of declaring class
Run Code Online (Sandbox Code Playgroud)

谢谢.

wer*_*ero 5

当你调用Method.invoke第一个参数必须是:

  • when方法是包含该方法的类的非静态实例
  • 当方法是静态null或类本身时.

由于你自己传递了类并且你得到了错误,它表明你试图调用的方法不是静态的,所以你应该调用它

addErrorMethod.invoke(rootObject, ErrorType.FIELD, propertyName, message, "");
//                    ^^^^^^^^^^- assuming it is instance on which we want to invoke this method
Run Code Online (Sandbox Code Playgroud)