Согласно документации :
[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