Dubbo源码分析(6):Code2
背景
定义解码和编码方法。 Code2是Code的升级版本。
类图
问题
DubboCodec的父类已经实现了Code2接口并且DubboCodec没有实现Code2接口,为什么要implement Code2接口?
实验
场景:定义一个接口I,类A承继并实现接口方法,类B承继类A并实现自己的接口方法,类C承继类B并实现自己的接口方法,类D承继类C不实现接口方法。
环境
Oracle -JDK1.8.0_101
情况1:
类D实例化一个对象,调用接口方法。
情况1的结果
调用得是类C的接口方法
情况2
类D承继接口I,并不实现接口方法,调用接口方法
情况2的结果
调用得是类C的接口方法
结论:
如果低JDK版本(因为没有网线暂时不测试)与JDK1.8表现一致的话,DubboCodec实现Code2接口就是多些一举。
不知道为什么这么设计
1.
2
protected Object decodeRequestData(Channel channel, ObjectInput in) throws IOException { return decodeRequestData(in); }
3
protected Object decodeRequestData(ObjectInput in) throws IOException { try { return in.readObject(); } catch (ClassNotFoundException e) { throw new IOException(StringUtils.toString("Read object failed.", e)); } }
明明只要传一个参数非要传三个!为以后需求变动预留得吗?对这种做法非常不赞同。