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, это работало нормально. Спасибо!

Другие вопросы по тегам