ドキュメントによると:
[
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