Java 如何重写jar文件中的方法?

Java 如何重写jar文件中的方法?,java,jar,Java,Jar,我在一个类中有一个方法,并且使用这个类创建了一个jar文件。jar文件包含在项目中。如何在应用程序中重写此方法?请帮助您需要在JAR中对类进行子类化,然后重写该方法。除非您更改源代码并重新编译,否则无法“更改”Java中现有类上的现有方法。如果您想“修补”当前行为,则需要复制现有Java文件,更新要重写的方法,并将其.class放在类路径的前面。@Pablo Santa Cruz是正确的(+1):无法更改现有代码。您必须继承现有类并重写子类中所需的内容 但如果您真的想更改现有编译模块中的某些内容

我在一个类中有一个方法,并且使用这个类创建了一个jar文件。jar文件包含在项目中。如何在应用程序中重写此方法?请帮助

您需要在JAR中对类进行子类化,然后重写该方法。除非您更改源代码并重新编译,否则无法“更改”Java中现有类上的现有方法。

如果您想“修补”当前行为,则需要复制现有Java文件,更新要重写的方法,并将其.class放在类路径的前面。

@Pablo Santa Cruz是正确的(+1):无法更改现有代码。您必须继承现有类并重写子类中所需的内容


但如果您真的想更改现有编译模块中的某些内容,您仍然可以使用字节码修改技术来完成。有很多软件包可以做到这一点。实现面向方面的Java AspectJ范例的流行高级包也会有所帮助。

如果您谈论的是从类继承然后重写方法(即从多态性的角度),那么除非该类是最终类,否则您可以像扩展其他类一样从该类进行扩展

如果您正在谈论更改jar文件本身中的方法行为,那么您需要获取源代码,自己更改方法,然后重新编译它并将其重新打包到另一个jar文件中。但是请注意,我真的不推荐这种方法,特别是如果jar是一个公共的库jar——如果库类的行为发生了改变(bug修复除外),那么以后维护您的代码的人将会非常困惑/被黑客攻击


如果你没有源代码,那么是的,你可以破解字节码,这样做。但我很有信心,这并不是本文所需要的:-)

如果您正在考虑在已加载的类中重写一个方法,那么看看这个

您到底是什么意思?你通常只需要写一个子类,然后像平常一样重写这个方法……我认为他/她意味着改变现有的方法。但不确定……为了完整性:从技术上讲,您可以更改该类(Java代理、加载时编织等),但我同意,对于在这种初学者水平上提问的人来说,这是不可取的。@Sean:谢谢!我不知道。我们将了解Java代理、加载时编织等。