Menurut dokumentasi :
[
java.lang.reflect.
]Proxy
menyediakan metode statis untuk membuat kelas dan instance proxy dinamis, dan ini juga merupakan superclass dari semua kelas proxy dinamis yang dibuat dengan metode tersebut.
The newProxyMethod
Metode (bertanggung jawab untuk menghasilkan proxy dinamis) memiliki tanda tangan berikut:
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)
throws IllegalArgumentException
Sayangnya, hal ini mencegah seseorang menghasilkan proxy dinamis yang memperluas kelas abstrak tertentu (daripada mengimplementasikan antarmuka tertentu). Ini masuk akal, mengingat java.lang.reflect.Proxy
adalah "kelas super dari semua proxy dinamis", sehingga mencegah kelas lain menjadi kelas super tersebut.
Oleh karena itu, apakah ada alternatif java.lang.reflect.Proxy
yang dapat menghasilkan proxy dinamis yang mewarisi dari kelas abstrak tertentu, mengarahkan semua panggilan ke metode abstrak ke penangan permintaan?
Misalnya, saya memiliki kelas abstrak Dog
:
public abstract class Dog {
public void bark() {
System.out.println("Woof!");
}
public abstract void fetch();
}
Apakah ada kelas yang mengizinkan saya melakukan hal berikut?
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