我正在使用 Javassist 重写字节码。我需要将一些局部变量的类型修改为对象。如何使用 Javassist 访问局部变量并更改其类型?
谢谢。
这个问题很老了,但是因为我做了类似的事情,所以我会发布我的解决方案:
由于我没有找到任何解决方案来更改 Javassist 中的类中的字段类型,因此我只是删除了旧方法并添加了一个具有相同名称但我想要的类型的新方法:
CtClass point = ClassPool.getDefault().get("Point");
CtField toBeDeleted = point .getField("fieldName");
point .removeField(toBeDeleted);
CtField newField = CtField.make("public int fieldName = 0;", point);
point.addField(newField );
因此,在这个示例中,我采用了fieldName
类point
中的字段,假设类型为Object
并且知道已在“int”类型的字段中更改并初始化为0