如何使java.lang.reflect.Proxy.newProxyInstance()返回的对象扩展其他类

时间:2011-12-09 18:57:34

标签: java interface encapsulation extend

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

返回指定接口的代理类的实例,该接口将方法调用分派给指定的调用处理程序。

我需要封装此方法返回的实例(例如,进入其他类),这样它也会扩展其他类。所以最后一个类将扩展一个类并实现指定的接口。

要扩展的类是:

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实现的所有接口。

1 个答案:

答案 0 :(得分:2)

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

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

public interface IProxy {
    ObjectRef getOref();
}

您的InvocationHandler应该通过返回其getOref成员来回复oref的来电。