Javassist常量池

时间:2014-07-30 07:06:24

标签: java javassist

问题1:如何更改ConstPool中条目的签名?例如,假设我对带有签名“methodref”的方法有()Ljava.util.Collection;。如何更改为“()I”?

我想这样做是因为当一个API发布时,对更新的API的依赖仍然使用旧方法,我想更改使用的签名,确保依赖的应用程序安全地实现它。 / p>

问题2:如何迭代LongVector常量池条目,而不必每一步都使用反射?由于LongVector是包私有的,ConstInfo是包私有的,我必须使用反射来循环获取所有方法返回类型。

这将与问题编号1一起使用,以迭代常量池并修改签名并将其信息存储在类查找中。

1 个答案:

答案 0 :(得分:1)

1)使用反射 - 没有其他方法可以访问ConstInfo。签名可以在MethodRef的名称和类型索引中找到。

2)使用反射 - 也没有其他方法可以访问LongVector的元素。获取LongVector,获取每个索引每个大小的元素(两者都可以使用反射访问 - LongVector也必须是包本地的),并将它们传递给问题1。

感谢您的帮助!