日期:2014-05-18  浏览次数:20693 次

一个很高深的问题
有两套协议包,一套叫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在一个类下都可以,方法重新就可以了。
------解决方案--------------------
方法重写
------解决方案--------------------
如果包名不一样的话就用委托模式的方案.
------解决方案--------------------