我有点陷入困境,我正在寻求一些如何解决它的帮助。我有一些源代码可以从idls创建的jar文件中导入各种类。现在我已经获得了这个idl jar的新版本,它有一个不同的包结构,它打破了我所有旧的import语句。我无法修改import语句所以我试图看看是否有解决方法。有什么想法吗?
基本上我被要求使当前源代码适用于jar的新版本和旧版本,最好不要修改代码。我不认为这是可能的,但我希望我错了。
答案 0 :(得分:1)
这是你可以做的一件事:重新创建所有旧类并使它们与新类匹配。例如,如果您有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
,因此您不必创建所有委托方法。但取决于你的项目可能不起作用。
希望这有帮助。
答案 1 :(得分:1)
没有办法做到这一点。但是如果你想要批量更改包名,可以使用命令sed of linux。
例如,如果您的旧软件包是com.patito,并且您想将其更改为org.duck,则可以执行以下操作:
sed 's/com.patito/org.duck/g' *.java
答案 2 :(得分:0)
这完全取决于结构变化的严重程度。如果新类(不同的功能)已经替换了旧类但保持了相同的名称,那么你就会非常敬酒。如果新类只有新名称/ 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旁边,并且应该工作。