是否可以为具有不同接口的SEVERAL对象定义一个invocationhandler(代理)?
因为这个代理在对象上的作用(所有检查和等等)是相同的(并且它们共享一个锁管理表,我更喜欢在一个地方的代理上使用它),
有办法吗?
谢谢, 阿里安
答案 0 :(得分: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语句。
答案 1 :(得分:0)
Proxy.newProxyInstance
专门接受一组接口,然后返回的代理实现所有接口:
Proxy.newProxyInstance(this.getClass().getClassLoader(), new Class[]{Foo.class, Bar.class} , new Handler())
我猜你必须先将代理转发给每个不同的接口,然后才能调用它上面的相关方法,但无论如何你总是必须抛出它,即使你只实现了一个接口。
我不确定问题是什么;如果这不是你的意思那么也许你可以澄清一下?