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

时间:2015-10-21 16:23:58

标签: 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, "");

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

 java.lang.IllegalArgumentException: object is not an instance of declaring class

感谢。

2 个答案:

答案 0 :(得分:5)

当您致电if(input_into.nextInt() != 0 || input_into.nextInt() < 0) 时,第一个参数必须是:

  • 当method是包含方法
  • 的类的非静态实例时
  • 当方法是静态Method.invoke或类本身时。

由于您自己传递了类并且出现了错误,因此它表明您尝试调用的方法不是静态的,因此您应该调用它,如

null

答案 1 :(得分:0)

你做得不对:

addErrorMethod.invoke(superClass, ErrorType.FIELD, propertyName, message, "");

应该阅读

addErrorMethod.invoke(rootObject, ErrorType.FIELD, propertyName, message, "");

superClassClass的一个实例,没有addErrorMessage()方法,正如错误消息告诉您的那样。该方法的第一个参数是对将在方法中用作this的对象的引用。