Java反射,从父类(super class)调用方法?

标签 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

谢谢。

最佳答案

当您调用 Method.invoke 时,第一个参数必须是:

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

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

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

关于Java反射,从父类(super class)调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33264489/

相关文章:

java - 如何使用Jsoup从html中提取指定长度的纯文本?

Java Formatter 类 toString() 不起作用

java - Realm java,如何通过字符串访问 RealmObject 属性(反射)

java - 关于反射包的问题

go - 在 Golang 中反射(reflect)接口(interface)

vb.net - 如何将类型转换为可以在 vb .net 中编译的字符串?

python - SqlAlchemy:检查/反射(reflect)有关关系的信息

eclipse 中的 java.lang.UnsupportedClassVersionError

java - 在 swt 中提交的多行文本上使用 Tab 键?

java - 自定义过滤器类在 play 框架中的位置