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

发布于 2024-12-20 14:07:28 字数 594 浏览 1 评论 0原文

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

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

Returns an instance of a proxy class for the specified interfaces that dispatches method invocations to the specified invocation handler.

I need to encapsulate instance returned by this method (for example,into some other class) so, that it will also extend other class. So the final class will extend one class and implement specified interfaces.

class to extend is:

public class IProxy {

ObjectRef oref;

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

}

so the process should be :

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

// some magic trick

and in the end I would like to have instance of class that extends IProxy and implements all interfaces that mi did implement.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

匿名。 2024-12-27 14:07:28

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

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

public interface IProxy {
    ObjectRef getOref();
}

您的 InitationHandler 应该通过返回其 oref 成员来响应 getOref 的调用。

You cannot do it, because the object returned from newProxyInstance already inherits from some other class, and you cannot inherit from two classes in Java.

You need to keep oref as an instance variable of your class that implements the InvocationHandler interface. You will initialize oref in the constructor of the InvocationHandler, and provide an interface to access oref through a method:

public interface IProxy {
    ObjectRef getOref();
}

Your InvocationHandler should respond to calls of getOref by returning its oref member.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文