Согласно документации:
[
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
, которые могут генерировать динамические прокси-серверы, которые наследуются от определенного абстрактного класса, перенаправляя все вызовы методам abstract обработчику вызова?
Например, предположим, что у меня есть абстрактный класс 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