网上能找到的都是修改私有变量, 访问私有方法, 我想要修改私有方法, 请问如何操作?
先上答案:反射只能调用对象的方法,不能修改对象的方法。
也就是说,反射能修改:只有对象的成员变量的值。
反射的目的:是让程序在运行时,能够动态获取或修改对象的所有成员变量,调用对象的所有方法。主要通过java.lang.reflect
类库中Filed
,Methodhe
以及 Constructor
三个类来进行操作。通过反射,程序就可以在运行时动态的:
Construcor
创建新的对象。Filed
的get()
和set()
方法读取和修改对象的成员变量。Method
的invoke()
方法调用对象的方法。10 回答11.1k 阅读
15 回答8.4k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
8 回答6.2k 阅读
2 回答2.7k 阅读✓ 已解决
反射是不能修改方法的,但是可以使用修改字节码的方式来实现修改。
使用javassist工具在类加载器加载这个类之前修改他的字节码。
比如修改这个方法的字节码:
org.jboss.resteasy.core.InjectorFactoryImpl.createMethodInjector()