简体   繁体   中英

Java reflection, call method from superClass?

I've seen a lot of examples, and I know what has been discussed. I do everything right, but I receive an error. Why is that? What am i doing wrong?

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

I get method, but when you call the invoker. I get the following error.

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

Thanks.

When you call Method.invoke the first parameter must be either:

  • when method is non-static instance of the class which contains the method
  • when method is static null or class itself.

Since you pass the class itself and you got error it suggests that method you are trying to invoke is not static, so you should invoke it like

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

You did not do everything right:

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

should read

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

superClass is an instance of Class , to which has no addErrorMessage() method, as the error message is telling you. The first parameter to the method is a reference to the object that will be used as this within the method.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM