我看过很多例子,我知道讨论的是什么。 我做的一切都是正确的,但我收到一个错误。这是为什么?我做错了什么?
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/