我正在使用Javassist重写字节码。我需要修改一些局部变量的类型来对象。如何使用Javassist访问局部变量并更改其类型?
感谢。
答案 0 :(得分:0)
这个问题已经很老了,但是由于我做了类似的事情,我会发布我的解决方案:
由于我没有找到任何改变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