我正在创建一个基于ASM的实用程序以动态生成类。我需要做的一件事情是生成一个具有通用类型作为参数的方法签名。例如。
public void setValue(List<String> value) {...}
问题是如何使用ASM库获取
List<String>
的描述符。我知道有一个实用程序方法asm.Type.getDescriptor(Class)
,我想知道是否有类似getDescriptor(java.lang.reflect.Type)
的东西,或者我怎么实现呢?谢谢...绿色
最佳答案
您在寻找签名,而不是描述符。描述符始终引用原始类型。
使用ASM,通常将a SignatureVisitor
用于此目的。对于您的示例,可以通过以下方式为void : List<String>
创建签名:
SignatureVisitor sv = new SignatureWriter();
SignatureVisitor psv = sv.visitParameterType();
psv.visitClassType(Type.getInternalName(List.class));
SignatureVisitor ppsv = psv.visitTypeArgument('=');
ppsv.visitClassType(Type.getInternalName(String.class));
psv.visitEnd();
SignatureVisitor rtv = sv.visitReturnType();
rtv.visitBaseType('V');
String signature = sv.toString();
由于调用
visitEnd
的条件要求,因此签名访问者API与其他访问者API一样直观,但是读取Javadoc可以了解其含义。关于java - ASM:查找通用类型的描述符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40188380/