Alternativas a java.lang.reflect.Proxy para crear proxies de clases abstractas (en lugar de interfaces)
De acuerdo ala documentación:
[java.lang.reflect.
]Proxy
proporciona métodos estáticos para crear clases e instancias de proxy dinámico, y también es la superclase de todas las clases de proxy dinámico creadas por esos métodos.
losnewProxyMethod
método (responsable de generar los proxys 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 quese extiende una clase abstracta específica (en lugar deimplementar interfaces específicas). Esto tiene sentido, considerandojava.lang.reflect.Proxy
es "la superclase de todos los proxys dinámicos", evitando así que otra clase sea la superclase.
Por lo tanto, ¿hay alguna alternativa parajava.lang.reflect.Proxy
que puede generar proxys dinámicos queheredar desde una clase abstracta específica, redirigiendo todas las llamadas alresumen métodos para el manejador de invocación?
Por ejemplo, supongamos que tengo una clase abstractaDog
:
public abstract class Dog {
public void bark() {
System.out.println("Woof!");
}
public abstract void fetch();
}
¿Hay una 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