Jag*_*uar 25 java android design-patterns legacy-code
我在一些遗留代码中有一个静态方法,由多个客户端调用.我显然没有选择覆盖它,或通过依赖注入改变行为.我不允许修改现有的类.
我现在要做的是使用反射更改行为(该方法 - 具有相同的签名和返回类型).
可能吗 ?如果没有,任何设计模式都能救我吗?
谢谢 !
编辑:对于我可以更改/修改的内容存在一些疑惑.我无法更改任何现有的类/方法 - 但我可以为项目添加更多类.我能用现有类做的最好的就是注释它们.这样做是为了避免破坏现有代码中的任何内容 - 这意味着对一个大项目进行了一轮完整的测试.
编辑2:java.lang.Instrumentation不适用于Android - 或者它听起来很合适!
Pie*_*nry 27
听起来像一个奇怪的要求......
无论如何,反射不允许你改变代码行为,它只能探索当前代码,调用方法和构造函数,更改字段值,那种东西.
如果要实际更改方法的行为,则必须使用字节码操作库(如ASM).但这不是一件容易的事,可能不是一个好主意......
可能对您有帮助的模式:
无论如何,最合乎逻辑的做法是找到修改现有类的方法,解决方法只会使代码更复杂,更难维护.
祝好运.
Dan*_*ush 16
我想你可以看看有一个方法的Instrumentation类redefineClasses(ClassDefintion classDefinition).
重新定义可以改变方法体,常量池和属性.重定义不得添加,删除或重命名字段或方法,更改方法的签名或更改继承.
希望这可以帮助.
参考文献:Javadoc
| 归档时间: |
|
| 查看次数: |
33344 次 |
| 最近记录: |