cindy 重名函数

来源:互联网 发布:软件开发实习生 翻译 编辑:程序博客网 时间:2024/04/29 05:48

 

前几天MSN和Arbow聊天时,他提到了可以在Cindy的Session接口中加入Object getAttribute(Stringkey)以及void setAttribute(String key, Objectvalue)两个方法,应用会更方便一些。原来的Object getAttachment()和void setAttachment(Objectobj)虽然也是这个用途,但是由于只能将设置一个Object对象,用起来多多少少有些不方便,MINA也同时提供了这两种方法来方便应用。
 
我觉得很有道理,我自己在使用Cindy时也常碰到要关联多个对象到Session,用attachment来做也是有点麻烦,况且加入一个这个的接口并不需要什么时间和技术含量,在AbstractSession中用一个Map来实现就可以了。
 
但改完Session接口后就发现了一个新问题,加入的Object getAttribute(String)与JMXDynamicMBean中的Object getAttribute(String attribute) throwsAttributeNotFoundException,
 MBeanException, ReflectionException有冲突。这种事情我还是第一次遇到,基本相同的声明,却有着完全不同的意义,Java语言似乎也没有提供某种机制来解决这种问题。
 
对于我而言,事情是比较好办的,我可以将Session接口的getAttribute改为getSessionAttribute来解决冲突。但是如果对于一个应用类要实现两个无法改变的接口,并且接口中有意义不同的重名函数该如何解决呢?当然,这种情况应该是极为罕见。
 
MINA的运气相对差一点,它的Roadmap中提到要在1.1中才加入JMX的支持,到时发生冲突的概率会很大。不过只要它不返回类似Cindy这样的JmxSession,还是能通过Dynamic MBean来避免的。如:
 
public Object getAttribute(String attribute) {
    if ("attribute".equals(attribute)) {
        return session.getAttribute();
    }
    ......
}