0

是否可以为具有不同接口的几个对象定义一个调用处理程序(代理)?

因为这个代理对对象所做的(所有检查等)是相同的(并且它们共享一个锁管理表,我更喜欢将它放在代理上的一个地方),

有没有办法做到这一点?

谢谢,阿里安

4

2 回答 2

1

好吧,这样做的方法是拥有一个表示您的公共 IH 代码的基类,然后为每个特定调用将其子类化。

否则,您可以检查进来的对象,并确定适当的操作:

public Object invoke(Object proxy, Method method, Object[] args) {
    if (proxy instanceof InterfaceA) {
        handleInterfaceA(proxy, method, args);
    } else if (proxy instanceof InterfaceB) {
        handleInterfaceB(proxy, method, args);
    }
}

但是由于 Java 已经有一个类调度机制,使用它比使用一堆 IF 或一个 switch 语句更好。

于 2012-11-12T04:10:37.033 回答
0

Proxy.newProxyInstance专门接受一个接口数组,返回的代理实现了所有接口:

Proxy.newProxyInstance(this.getClass().getClassLoader(), new Class[]{Foo.class, Bar.class} , new Handler())

我想您必须将代理转换为每个不同的接口,然后才能调用它的相关方法,但无论如何您总是必须转换它,即使您只实现一个接口。

我不确定问题是什么;如果这不是你的意思,那么也许你可以澄清一下?

于 2013-11-29T16:42:55.643 回答