Zgodnie z dokumentacją :
[
java.lang.reflect.
]Proxy
zapewnia statyczne metody tworzenia dynamicznych klas i instancji proxy, a także stanowi nadklasę wszystkich dynamicznych klas proxy tworzonych przez te metody.
newProxyMethod
Metoda (odpowiedzialny za generowanie dynamicznych proxy) ma następujący podpis:
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)
throws IllegalArgumentException
Niestety, uniemożliwia to generowanie dynamicznego serwera proxy, który rozszerza określoną klasę abstrakcyjną (zamiast implementować określone interfejsy). Ma to sens, biorąc pod uwagę, że java.lang.reflect.Proxy
jest to „nadklasa wszystkich dynamicznych serwerów proxy”, zapobiegając w ten sposób innej klasie bycia nadklasą.
Czy w związku z tym istnieją alternatywy, java.lang.reflect.Proxy
które mogą generować dynamiczne serwery proxy, które dziedziczą z określonej klasy abstrakcyjnej, przekierowując wszystkie wywołania metod abstrakcyjnych do modułu obsługi wywołań?
Na przykład załóżmy, że mam klasę abstrakcyjną Dog
:
public abstract class Dog {
public void bark() {
System.out.println("Woof!");
}
public abstract void fetch();
}
Czy jest klasa, która pozwala mi wykonywać następujące czynności?
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