我正在学习asm,我发现了两个有趣的api
在org. object tweb.asm.ClassVisitor
中
/**
* Visits an annotation on a type in the class signature.
*/
public AnnotationVisitor visitTypeAnnotation(int typeRef,
TypePath typePath, String desc, boolean visible);
并在org. object tweb.asm.ControlodVisitor
中
/**
* Visits an annotation on a type in the method signature.
*
*/
public AnnotationVisitor visitTypeAnnotation(int typeRef,
TypePath typePath, String desc, boolean visible);
但是什么情况我们就用这两种方法。
我们如何使用在java中的类/方法签名
中的类型上生成注释?
我尽量
public @Z Integer testMethod(String testParam)
但是@Z
仍然由visitAnnotion调用,而不是visitTypeAnnotion…
ASM将什么情况称为visitTypeAnnotion?
thx~
类型注释是一种新的Java
public @Z Integer testMethod(String testParam)
是歧义。Afaik,注释将同时记录方法和返回类型,然后。类似地,类似的声明
public Integer testMethod(@Z String testParam)
如果@Z
同时支持PARAMETER
目标,则会有歧义。
只有类型注释才能出现的独特用途示例如下
public Integer testMethod(List<@Z String> testParam) throws @Z RuntimeException {
return new @Z Integer(testParam.get((@Z int)0));
}
如果您与的留档进行比较,您可能会认识到
typeRef
列出的可能值。
如果您想知道如何注释METHOD_RECEIVER
,这是一个新的Java
class Example {
void instanceMethod(@Z Example this, int firstOrdinaryParameter) {
}
}
在本例中,instanceMethod()
的方法接收者类型是@Z示例
而不是示例
,尽管这种差异对Java语言本身没有意义。