我陷入了一点困境,我正在寻求一些关于如何解决它的帮助。我有一些源代码,可以从从从idls创建的jar文件中导入各种类。现在,我得到了这个idl jar的新版本,它有一个不同的包结构,打破了我所有的旧导入语句。我不能修改import语句,所以我想看看是否有办法解决这个问题。有什么想法吗?
基本上,我被要求让当前的源代码同时使用jar的新版本和旧版本,最好不要修改代码。我认为这不可能,但我希望我错了。
您可以做一件事:重新创建所有旧类,并使它们与新类匹配。例如,如果你有a.Foo
,现在是b.foo
,你可以有:
package a;
public class Foo {
b.Foo foo;
public void method() {
foo.method();
}
}
package b;
public class Foo {
public void method() {
// Your new code...
}
}
这有点痛苦,但我担心这是向后兼容性的代价。
如果类结构允许,另一个解决方案是让a.Foo
继承b.foo
,这样就不必创建所有的委托方法。但根据你的项目,这可能不起作用。
希望这能有所帮助。
不,没有办法做到这一点。但是,如果您想批量更改包名称,可以使用linux的命令sed。
例如,如果你的旧包是com.patito,你想把它改成org.duck,你可以做一些类似的事情:
sed 's/com.patito/org.duck/g' *.java
这完全取决于结构变化的严重程度。如果新的类(不同的功能)取代了旧的类,但保持了相同的名称,那么你就完了。如果新类只是具有新名称/pkgs,那么您可以为所有原始导入创建一个包装器。
例如,如果原始类是:
package my.package;
public class OldClassName{
public void getSomeData(){}
}
但现在已经改为:
package my.new.package;
public class NewClassName{
public void getSomeData(){}
}
您可以创建原始类的包装器:
package my.package;
import my.new.package;
public class OldClassName extends NewClassName{
}
注意事项:
- 如果你上了很多课,这真是太痛苦了
- 你将被限制在非期末的课程中。如果任何原始导入都是最终类,那么你就完了,你能做的最好的事情就是构图(这意味着要做更多的工作)和大量的委托
如果你有很多类,你可以随时为自己编写一个小的实用程序来为你生成包装器。。。
完成后,您应该能够将新的包装器jar放在新的lib旁边,就可以了。