如何使用org.ow2.asm6.0修改Java字节码
在一次采访中,我被问到以下问题: 问题:不能使用Java反射来设置私有字段值,因为没有setter或getter函数 还有别的办法吗 示例类:如何使用org.ow2.asm6.0修改Java字节码,java,Java,在一次采访中,我被问到以下问题: 问题:不能使用Java反射来设置私有字段值,因为没有setter或getter函数 还有别的办法吗 示例类: public class User2 { private String name; public String toString(){ return "name : " + name; } } 如何更改名称 我是ASM框架的新手 我想使用ASM设置name字段值和gettername字段值 请不要使用ASM创
public class User2 {
private String name;
public String toString(){
return "name : " + name;
}
}
如何更改名称
我是ASM框架的新手 我想使用ASM设置
name
字段值和gettername
字段值
请不要使用ASM创建getter和setter函数。反射是实现这一点的标准方法。但也有其他方法: 比如,()或者 如果您有一些具有私人价值的库,您可以对其进行反编译和编辑 或者最明显的是更改源代码。提示:公开
或创建getName
最后是代码被链接和执行。在代码的创建、链接和执行过程中,有几种方式和方法。如果其中任何一个值得您选择。您可以使用任何字节码库(如ASM、BCEL、javaassit等)来添加/删除/更改字段(方法也是)。此链接提供了示例 为什么不能使用反射?为什么不能添加一个getter或setter?你能添加一个构造函数吗?你说的“不能使用反射”是什么意思?把这个值公开?没有设置器,没有构造函数,没有反射。嗯,您可以使用Java代理插入字节码。。。。。