2015-10-21 6 views
0

Я видел много примеров, и я знаю, что обсуждалось. Делаю все правильно, но я получаю сообщение об ошибке. Почему это? Что я делаю не так?Отражение Java, вызов метода от superClass?

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

Я получаю метод, но когда вы вызываете invoker. Я получаю следующую ошибку.

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

Thanks.

+1

«Я делаю все правильно, но получаю сообщение об ошибке». Обратиться за помощью? –

+0

да, пожалуйста, помогите.)) – JDev

+1

Если вы все сделали правильно, вы не получите ошибку. – Andreas

ответ

5

При вызове Method.invoke первый параметр должен быть:

  • когда метод не является статическим экземпляром класса, который содержит метод
  • когда метод является статическим null или сам класс.

Так как вы сдадите сам класс, и вы получили ошибку, то это говорит о том, что метод, который вы пытаетесь вызвать не статична, поэтому вы должны вызывать его как

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

"объект класса". Я делаю так ... – JDev

+0

@JDev Нет, вы передаете класс ('superClass'), а не объект (' rootObject') – Andreas

+0

«объект класса», а не «класс объекта» –

0

Вы не сделали все правильно:

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

следует читать

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

superClass - это экземпляр Class, к которому не применяется метод addErrorMessage(), как сообщается вам об ошибке. Первым параметром метода является ссылка на объект, который будет использоваться как this в рамках метода.

Смежные вопросы