Java рефлексия вызывает метод по умолчанию из производного класса
Из предыдущих постов я понял, что способ динамического вызова метода по умолчанию заключается в следующем:
final Class<?> declaringClass = method.getDeclaringClass();
final Constructor<Lookup> constructor =
MethodHandles.Lookup.class.getDeclaredConstructor(Class.class, int.class);
constructor.setAccessible(true);
final MethodHandles.Lookup defaultMethodLookup =
constructor.newInstance(declaringClass, MethodHandles.Lookup.PRIVATE);
return defaultMethodLookup
.unreflectSpecial(method, declaringClass)
.bindTo(proxy)
.invokeWithArguments(args);
Это прекрасно работает; однако, если вызов происходит из производного интерфейса, который переопределяет конкретный метод, то приведенный выше код вызывает метод базового интерфейса.
Итак, проблема в том, что в базовом интерфейсе есть метод по умолчанию, скажем, "void fire()", и подчиненный интерфейс переопределяет этот метод, тогда механизм, который вызывает методы по умолчанию, всегда вызывает только один на базовом классе.
1 ответ
Просто для обновления мне удалось решить его по-другому. Итак, в основном я отслеживаю текущий объект через его прокси, поэтому я получил правильный (производный) метод с помощью отражения и выполнил метод MethodLookup, это работало нормально. Спасибо!