如何使用org.ow2.asm6.0修改Java字节码

如何使用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创

在一次采访中,我被问到以下问题:

问题:不能使用Java反射来设置私有字段值,因为没有setter或getter函数

还有别的办法吗

示例类:

public class User2 {
    private String name;

    public String toString(){
        return "name : " + name;
    }
}
如何更改
名称


我是ASM框架的新手

我想使用ASM设置
name
字段值和getter
name
字段值


请不要使用ASM创建getter和setter函数。

反射是实现这一点的标准方法。但也有其他方法:

比如,()或者

如果您有一些具有私人价值的库,您可以对其进行反编译和编辑

或者最明显的是更改源代码。提示:公开
或创建
getName


最后是代码被链接和执行。在代码的创建、链接和执行过程中,有几种方式和方法。如果其中任何一个值得您选择。

您可以使用任何字节码库(如ASM、BCEL、javaassit等)来添加/删除/更改字段(方法也是)。此链接提供了示例

为什么不能使用反射?为什么不能添加一个getter或setter?你能添加一个构造函数吗?你说的“不能使用反射”是什么意思?把这个值公开?没有设置器,没有构造函数,没有反射。嗯,您可以使用Java代理插入字节码。。。。。