一个很高深的有关问题
阅读
有两套协议包,一套叫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();
------解决方案--------------------
那就用反射了,不用动态代理了,代码太多
------解决方案--------------------
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();
{
------解决方案--------------------
还有你为什么搞2套包 取同一个名字这么蛋疼 用抽象试试呢
这个的话,我只是打一个比方,因为升级2.0把以前的东西都做了重新改进了,有些类就放到更适合的包里面去了。
方法名一样如何?2个test在一个类下都可以,方法重新就可以了。
------解决方案--------------------
方法重写
------解决方案--------------------
如果包名不一样的话就用委托模式的方案.
------解决方案--------------------
if (协议1) {
Test t = new com.common.Test();
} else
if (协议2) {
Test t = new com.common.test.Test();
{
这样的话,每个用到的地方都要判断。。而且会有N多if else的,嘿嘿。我只是举了个例子,其实引用的地方还是挺多的。
使用工厂 + 状态模式就好了啊。
阅读
上一篇:jsp 怎么调用java类中的方法 下一篇:返回列表