Según la documentación :
[
java.lang.reflect.
]Proxy
proporciona métodos estáticos para crear instancias y clases de proxy dinámicos, y también es la superclase de todas las clases de proxy dinámicas creadas por esos métodos.
El newProxyMethod
método (responsable de generar los proxies dinámicos) tiene la siguiente firma:
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)
throws IllegalArgumentException
Desafortunadamente, esto evita que uno genere un proxy dinámico que amplíe una clase abstracta específica (en lugar de implementar interfaces específicas). Esto tiene sentido, considerando que java.lang.reflect.Proxy
es "la superclase de todos los proxies dinámicos", evitando así que otra clase sea la superclase.
Por lo tanto, ¿hay alguna alternativa java.lang.reflect.Proxy
que pueda generar proxies dinámicos que hereden de una clase abstracta específica, redirigiendo todas las llamadas a los métodos abstractos al controlador de invocación?
Por ejemplo, supongamos que tengo una clase abstracta Dog
:
public abstract class Dog {
public void bark() {
System.out.println("Woof!");
}
public abstract void fetch();
}
¿Existe alguna clase que me permita hacer lo siguiente?
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