我有一个充满错误的 Java 类,甚至无法在我的计算机上编译(我不知道这个人是如何编译它的),但不知何故它可以工作。我无法用我常用的工具重新编译它,所以我正在寻找可以编译它但可能忽略错误的东西,或者我认为很酷的东西可以在反编译并显示文件源的程序中打开它,允许我编辑它,然后自动重新编译它。有点像 JD-GUI,但你可以编辑文件。
我认为 Java 不存在这样的工具。 或者至少,不是以有效解决您的问题的形式。
更有效的方法是找出导致这些编译错误的原因并修复它。 如果您在应该编译的文件中遇到一堆错误(例如,因为它为其他人编译),那么它很可能是以下之一:
一旦你知道问题是什么,这些都很容易解决。
如果您向我们提供了编译错误的示例,我们可以确认这一点......或提供更好的诊断。
当前一代的反编译器不太擅长生成可编译源代码。 此外,这种方法无法解决我上面列出的任何问题。 (即使确实如此,你也会通过破解反编译的源代码给自己挖一个很深的洞。)
尽管 Java 字节码比直接编译为可执行代码的语言稍微容易反编译,但 Java 反编译器的效率却非常低下,尤其是在涉及更复杂的代码时,如果原始源代码使用泛型则更是如此。生成的源代码通常与原始代码没有任何关系,如果它能够编译的话......
如果您有该类源代码的一些人类生成版本,我建议尝试修复该问题,而不是尝试对
.class
文件进行逆向工程。如果您有
.class
文件,您仍然可以在子类中扩展或重写其某些方法,从本质上修改其行为。像这样使用继承并不总是可行,但它通常有助于第三方黑盒代码......您可能想看看Javassist。它是一个字节码操作库,除其他功能外,它还允许您在现有方法中插入 Java 语句。它确实有很多限制,但在某些情况下非常有帮助......