Belgelere göre :
[
java.lang.reflect.
]Proxy
, dinamik proxy sınıfları ve örnekleri oluşturmak için statik yöntemler sağlar ve ayrıca bu yöntemler tarafından oluşturulan tüm dinamik proxy sınıflarının üst sınıfıdır.
newProxyMethod
Yöntem (dinamik vekiller üretilmesinden sorumlu) aşağıdaki imzası vardır:
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)
throws IllegalArgumentException
Ne yazık ki, dinamik bir proxy üreten bu önler bir uzanan belirli soyut sınıf (yerine uygulanması belirli arabirimleri . Bu mantıklıdır, java.lang.reflect.Proxy
"tüm dinamik vekillerin üst sınıfı" olduğu düşünülürse , başka bir sınıfın süper sınıf olmasını engeller.
Bu nedenle, belirli bir soyut sınıftan devralan ve tüm çağrıları soyuta yönlendiren java.lang.reflect.Proxy
dinamik proxy'ler oluşturabilen herhangi bir alternatif var mı? yöntemlere çağrı işleyicisine mı?
Örneğin, soyut bir sınıfım olduğunu varsayalım Dog
:
public abstract class Dog {
public void bark() {
System.out.println("Woof!");
}
public abstract void fetch();
}
Aşağıdakileri yapmama izin veren bir sınıf var mı?
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