我想使用 BCEL 6.0-SNAPSHOT 获取我的 CounterPersistence 类的通用信息(计数器类)。签名是这样的:
public interface CounterPersistence extends BasePersistence<Counter> {
....
}
我正在使用以下代码读取字节码
JavaClass javaClass = ...;
Attribute[] attributes = javaClass.getAttributes();
for (Attribute attribute : attributes) {
if (attribute instanceof Signature) {
Signature signature = (Signature) attribute;
//put the code here that get the Counter class from the signature
}
}
但是我未能编写解析签名并允许我获取类型 Counter 的代码。 思潮?
您可以使用 FindBug 中的 BCEL 实用程序,例如 GenericUtilities.getTypeParameters(...) 方法或更好地切换到 ASM 框架。
我找到了一个解决方案:
Class.forName(org.apache.bcel.classfile.Utility.methodSignatureArgumentTypes("(" + signature + ")V")[0]);