一个很高深的问题
有两套协议包,一套叫1.0,另一套叫2.0
1和2的区别,最明显的区别是分成了不同的包了,比如说 Test类,1.0在 com.common下面,但是2.0在com.common.test下面。相当于有一些类放到了不同的包里面。
写一个程序
public class TestDemo{
public void test(){
Test t = new Test();
}
}
能够根据使用的协议版本来引用不同版本的Test类吗?
Java没有C一样的引用不同的头文件的概念,各位有没有好的办法。
目前能想到的就是,建一个代理类,程序里面实际使用的是这个代理类,代理类可以根据协议版本来反射出来同版本的实际类,并代理里面的所有方法。这样写起来会比较麻烦。
------解决方案-------------------- 通常下没有办法通过版本不同。
import只分包,不管你什么版本。你的方法也行
------解决方案-------------------- 写一个获取对象的工厂类,里面就通过反射获取把,似乎没有其他的办法了,毕竟涉及的new 操作
------解决方案-------------------- 这种情况只能用反射了
------解决方案-------------------- 有点奇怪 你的test类在2套包里面的路径不一样 不能区分么
------解决方案-------------------- 还有你为什么搞2套包 取同一个名字这么蛋疼 用抽象试试呢
------解决方案-------------------- 对了,加完全限定名行不行?com.common.test.Test t = new com.common.test.Test();
------解决方案-------------------- 引用: Quote: 引用:
对了,加完全限定名行不行?com.common.test.Test t = new com.common.test.Test();
不是这个意思了,呵呵!是为了方便一套东西引用不同的两套协议,能够兼容。
相当于引用1.0的时候用第一个包下的类,2.0下用第二个包下的类,你这样的话就限定死了。
那就用反射了,不用动态代理了,代码太多
------解决方案--------------------
if (协议1) {
Test t = new Test1();
} else
if (协议2) {
Test t = new Test2();
{
------解决方案-------------------- if (协议1) {
Test t = new com.common.Test();
} else
if (协议2) {
Test t = new com.common.test.Test();
{
------解决方案-------------------- 引用: Quote: 引用:
还有你为什么搞2套包 取同一个名字这么蛋疼 用抽象试试呢
这个的话,我只是打一个比方,因为升级2.0把以前的东西都做了重新改进了,有些类就放到更适合的包里面去了。
方法名一样如何?2个test在一个类下都可以,方法重新就可以了。
------解决方案-------------------- 方法重写
------解决方案-------------------- 如果包名不一样的话就用委托模式的方案.
------解决方案--------------------