Могу ли я использовать Reflection для вызова супер-метода метода? - PullRequest
0 голосов
/ 20 июня 2020

Я хочу вызвать супер-метод метода с помощью отражения, но мой метод не работает, и я не уверен, что это возможно. Вот мой метод вызова метода super для метода equals(Object) класса T, который здесь также называется targetClass:

private ToBooleanThrowingBiFunction<T> getSuperEquals() {
  Class<T> targetClass = getTargetClass();
  Class<?> superClass = targetClass.getSuperclass();
  while ((superClass != Object.class) && (superClass != null)) {
    try {
      Method method = superClass.getDeclaredMethod("equals", Object.class);
      return (thisOne, thatOne) -> {
        try {
          return (Boolean) method.invoke(thisOne, thatOne);
        } catch (InvocationTargetException e) {
          throw new IllegalStateException(e.getCause());
        }
      };
    } catch (NoSuchMethodException e) {
      superClass = superClass.getSuperclass();
    }
  }
  throw new IllegalArgumentException(String.format("E10: No superclass of %s has an equals() method.", targetClass));
}

@FunctionalInterface
private interface ToBooleanThrowingBiFunction<T>  {
  boolean eval(T thisOne, T thatOne) throws IllegalAccessException;
}

Этот код правильно извлекает метод, содержащий метод super.equals () . Но когда я его вызываю, он выполняет метод equals () класса targetClass. Есть ли способ сделать это?

1 Ответ

0 голосов
/ 26 июня 2020

Попробовав несколько вещей, я пришел к выводу, что это просто невозможно. (Меня это не удивляет, но я подумал, что попробую. Я часто удивляюсь тому, что можно сделать с помощью отражения, но вы не можете этого сделать.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...