Selon la documentation :
[
java.lang.reflect.
]Proxy
fournit des méthodes statiques pour créer des classes et des instances de proxy et c'est également le superclasse de toutes les classes créées par ces méthodes.
El newProxyMethod
méthode) (responsable de la génération des proxies dynamiques) a la signature suivante :
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)
throws IllegalArgumentException
Malheureusement, cela empêche la génération d'un proxy dynamique qui étend une classe abstraite spécifique (plutôt que mise en œuvre de interfaces spécifiques). Cela est logique, étant donné que java.lang.reflect.Proxy
est "la superclasse de toutes les proxies dynamiques", ce qui empêche une autre classe d'être la superclasse.
Par conséquent, existe-t-il des alternatives à java.lang.reflect.Proxy
qui peut générer des proxies dynamiques qui hériter de à partir d'une classe abstraite spécifique, en redirigeant tous les appels vers la classe abstrait au gestionnaire d'invocation ?
Par exemple, supposons que j'ai une classe abstraite Dog
:
public abstract class Dog {
public void bark() {
System.out.println("Woof!");
}
public abstract void fetch();
}
Existe-t-il une classe qui me permette de faire ce qui suit ?
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