Gel*_*Luo 1 java java-bytecode-asm
我正在创建一个基于 ASM 的实用程序来动态生成类。我需要做的一件事是生成一个具有泛型类型作为参数的方法签名。例如
public void setValue(List<String> value) {...}
Run Code Online (Sandbox Code Playgroud)
问题是如何获得List<String>使用 ASM 库的描述符。我知道有一个实用方法asm.Type.getDescriptor(Class),我想知道有没有类似的方法getDescriptor(java.lang.reflect.Type),或者我该如何实现?
谢谢...绿色
您正在寻找签名,而不是描述符。描述符总是指原始类型。
对于 ASM,您通常会为此目的使用aSignatureVisitor。对于您的示例,您可以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();
Run Code Online (Sandbox Code Playgroud)
由于调用的条件要求,签名访问者 API 与其他访问者 API 一样直观,visitEnd但阅读 javadoc 可以了解其含义。
| 归档时间: |
|
| 查看次数: |
1083 次 |
| 最近记录: |