提问者:小点点

什么是ClassVisitor#visitTypeAnno有方法的例子?


我正在学习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~


共1个答案

匿名用户

类型注释是一种新的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语言本身没有意义。