De acordo com a documentação :
[
java.lang.reflect.]Proxyfornece métodos estáticos para a criação de classes e instâncias de proxy dinâmico, e também é a superclasse de todas as classes de proxy dinâmico criadas por esses métodos.
O newProxyMethodmétodo (responsável por gerar os proxies dinâmicos) possui a seguinte assinatura:
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)
throws IllegalArgumentException
Infelizmente, isso impede que se gere um proxy dinâmico que estenda uma classe abstrata específica (em vez de implementar interfaces específicas). Isso faz sentido, considerando que java.lang.reflect.Proxyé "a superclasse de todos os proxies dinâmicos", evitando assim que outra classe seja a superclasse.
Portanto, há alguma alternativa para java.lang.reflect.Proxyque possa gerar proxies dinâmicos que herdam de uma classe abstrata específica, redirecionando todas as chamadas aos métodos abstratos para o manipulador de invocação?
Por exemplo, suponha que eu tenha uma classe abstrata Dog:
public abstract class Dog {
public void bark() {
System.out.println("Woof!");
}
public abstract void fetch();
}
Existe uma classe que me permite fazer o seguinte?
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