我在类中有一个方法,使用这个类创建一个jar文件。 jar文件包含在项目中。如何在应用程序中覆盖此方法?请帮忙
答案 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?