如何覆盖jar文件中的方法?

时间:2011-07-14 13:43:10

标签: java jar

我在类中有一个方法,使用这个类创建一个jar文件。 jar文件包含在项目中。如何在应用程序中覆盖此方法?请帮忙

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

如果您想要“修补”当前行为,那么您需要复制现有的java文件,更新要覆盖的方法并将其.class放在CLASSPATH中。

答案 2 :(得分:1)

@Pablo Santa Cruz是对的(+1):您无法更改现有代码。你必须继承现有的类并覆盖你想要的子类。

但是如果你真的想要改变现有编译模块中的某些东西,你仍然可以使用字节码修改技术。有很多软件包可以做到这一点。一个流行的更高级别的包实现了Java AspectJ的面向方面的范例也可以提供帮助。

答案 3 :(得分:0)

如果你正在谈论从继承类然后重写它(或从多态的角度来看)覆盖方法,那么除非类是最终的,否则你可以像对待任何其他类一样从它扩展。

如果你正在谈论改变jar文件本身内部的方法行为,你需要获取源代码,自己更改方法,然后重新编译它并在另一个jar文件中重新打包它。但是请注意,我真的不推荐这种方法,特别是如果jar是一个常见的库jar - 如果库类的行为被改变了,那么稍后维护你的代码的人将会真的被混淆/黑客攻击(错误修复一边)! / p>

如果您还没有获得源代码,那么您可以破解字节码并按此方式执行操作。但我非常有信心这不是我们需要的东西: - )

答案 4 :(得分:0)

如果您正在考虑覆盖已加载的类中的方法,请查看此Java reflection: How do I override or generate methods at runtime?