2011-12-09 41 views
2
newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h); 

返回指定接口的代理类实例,该接口将方法调用分派给指定的调用处理程序。如何使java.lang.reflect.Proxy.newProxyInstance()返回的对象扩展其他类

我需要封装由此方法返回的实例(例如,转换为其他类),所以它也会扩展其他类。所以最终的类将扩展一个类并实现指定的接口。

类扩展为:

public class IProxy { 

ObjectRef oref; 

public IProxy(ObjectRef oref) { 
    this.oref = oref; 
} 

} 

所以这个过程应该是:

MyInterface() mi=(MyInterface) newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h); 

// some magic trick 

,并在最后,我想有一个扩展IProxy和类的实例实现所有界面,MI执行。

+0

这是不可能的。你能否提供更多细节,说明为什么它应该延续这个阶级 - 可能有其他方法来实现你想要的。 – gkamal

回答

2

你不能这样做,因为从newProxyInstance返回的对象已经从某个其他类继承,并且不能从Java中的两个类继承。

您需要将oref作为实现InvocationHandler接口的类的实例变量。您将在InvocationHandler的构造函数初始化oref,并通过一个方法提供访问oref接口:

public interface IProxy { 
    ObjectRef getOref(); 
} 

InvocationHandler应通过返回其oref成员的getOref呼吁作出响应。

+0

但即使如此:他怎么能实现IProxy的接口,而无需直接引用类加载器? – jayunit100

+1

他不会在Java意义上'实现'那个接口。相反,当它检测到被调用的方法是来自'IProxy'的getOref''时,它会响应'getOref'的调用,作为它在调用(Object,Method,Object [])'方法实现内的调度例程的一部分。 。 – dasblinkenlight