По документации :
[
java.lang.reflect.
]Proxy
предоставляет статические методы для создания динамических прокси-классов и экземпляров, а также является суперклассом всех динамических прокси-классов, созданных этими методами.
newProxyMethod
Метод (отвечает за генерацию динамических прокси) имеет следующую подпись:
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)
throws IllegalArgumentException
К сожалению, это не позволяет генерировать динамический прокси, который расширяет определенный абстрактный класс (а не реализует определенные интерфейсы). Это имеет смысл, учитывая, что java.lang.reflect.Proxy
это «суперкласс всех динамических прокси», тем самым предотвращая то, что другой класс является суперклассом.
Следовательно, есть ли какие-либо альтернативы тому, java.lang.reflect.Proxy
что может генерировать динамические прокси, которые наследуются от определенного абстрактного класса, перенаправляя все вызовы абстрактных методов на обработчик вызова?
Например, предположим, что у меня есть абстрактный класс Dog
:
public abstract class Dog {
public void bark() {
System.out.println("Woof!");
}
public abstract void fetch();
}
Есть ли класс, который позволяет мне делать следующее?
Dog dog = SomeOtherProxy.newProxyInstance(classLoader, Dog.class, h);
dog.fetch(); // Will be handled by the invocation handler
dog.bark(); // Will NOT be handled by the invocation handler