我有一个包含大量包和类文件的大型预编译项目。我已经提取了一个类文件并对其进行了反编译并编辑了一些代码。现在我想编译已更改的代码并将其重新插入到原始的预编译项目中,但不幸的是,代码在预编译的项目中保留了很多对对象的引用,因此如果没有它已经在项目中,我就无法编译这造成了一个相当大的悖论。我有什么可以做我想要完成的事情吗?
答案 0 :(得分:2)
只需使用类路径编译它,类路径引用现有的类文件(或包含这些类文件的jar文件)。应该没问题。
但是,请注意,如果更改文件中的任何常量,那些的更改将不会反映在引用这些常量的任何其他代码中。
从完整的源代码重新编译通常会更好。使用原始源代码而不仅仅是反编译的结果也是一个更好的主意 - 您是否无法访问原始源代码? (如果你不这样做,你确定你所做的事情在你的国家是合法的吗?我不是律师,但你至少应该检查......)
答案 1 :(得分:0)
我会重新编译整个事情以避免出现问题,但是如果你必须尝试这个,请告诉我他们是否适合你:
不是在原始项目中加载类,而是使用classForName http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html
加载它请记住,您无法更改方法的签名,因为这会指示不同的对象,因为它不会遵循相同的合同(接口)。
另请注意serialVersionId What is a serialVersionUID and why should I use it?