java调用重写方法快捷方式_在编译的Java类中重写方法调用

我希望在解析编译的类文件时,在方法体内调用anther类来替换对给定类的调用…

换句话说,是否有一种方法可以检测方法中给定类的用法,并使用类似javaassist的方法替换方法的那一部分.

例如..如果我有编译版本的

class A { public int m() { int i = 2; B.multiply(i,i); return i; } }

有没有一种方法可以检测B的使用,然后改变要执行的代码

class A { public int m() { int i = 2; C.divide(i,i); return i; } }

我知道另一种方法是编写一个解析器来grep源文件以供使用,但我更喜欢更优雅的解决方案,例如使用反射来生成新的编译类文件.

有什么想法吗 ?

解决方法:

正如@djna所说,可以在加载字节码文件之前对其进行修改,但您可能不希望这样做:

>执行代码修改的代码可能很复杂且难以维护.

>已修改的代码很可能难以调试.首先,源级调试器将显示不再与您实际编辑的代码对应的源代码.

字节码重写在某些情况下很有用.例如,JDO实现使用字节码重写来将对象成员提取替换为对持久性库的调用.但是,如果您可以访问这些文件的源代码,则可以通过预处理(或生成)源代码获得更好(即更易维护)的解决方案.

编辑:AOP或Groovy听起来也像是可行的替代方案,具体取决于您预期的重写程度.

标签:java,methods,reflection,bytecode-manipulation

来源: https://codeday.me/bug/20190527/1160363.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值