Згідно з документацією :
[
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
які можуть генерувати динамічні проксі-сервери, які успадковуються від певного абстрактного класу, перенаправляючи всі виклики до абстрактних методів до обробника виклику?
Наприклад, припустимо, у мене є абстрактний клас 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