@Poko
@Poko2
class AnnotationTest2(val name: String = "name2")
main:
Class.forName("com.qinglianyun.kotlin.class8.AnnotationTest2")
.annotations.forEach {
println(it)
}
annotation class Poko
annotation class Poko2
反编译
@Poko
@Metadata(
mv = {1, 1, 13},
bv = {1, 0, 3},
k = 1,
d1 = {"\u0000\u0012\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0000\n\u0002\u0010\u000e\n\u0002\b\u0004\b\u0017\u0018\u00002\u00020\u0001B\u000f\u0012\b\b\u0002\u0010\u0002\u001a\u00020\u0003¢\u0006\u0002\u0010\u0004R\u0014\u0010\u0002\u001a\u00020\u0003X\u0096\u0004¢\u0006\b\n\u0000\u001a\u0004\b\u0005\u0010\u0006¨\u0006\u0007"},
d2 = {"Lcom/qinglianyun/kotlin/class8/AnnotationTest1;", "", "name", "", "(Ljava/lang/String;)V", "getName", "()Ljava/lang/String;", "app"}
)
public class AnnotationTest1 {
Metadata
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.CLASS)
@SinceKotlin("1.3")
public annotation class Metadata(
控制台输出
@com.qinglianyun.kotlin.class4.annotations.Poko()
@com.qinglianyun.kotlin.class4.annotations.Poko2()
@kotlin.Metadata(xi=0, bv=[1, 0, 3], mv=[1, 1, 13], k=1, xs=, d1=[
20B0¢R0X–¢
¨], d2=[Lcom/qinglianyun/kotlin/class8/AnnotationTest2;, , name, , (Ljava/lang/String;)V, getName, ()Ljava/lang/String;, app_debug], pn=)
Process finished with exit code 0
首先调用getAnnotation方法单个注解是正确的但是当一个class被多个注解修饰时调用.annotations会出现三个注解(本身只有2个)字节码发现默认会生成@Metadata注解。那么我现在有3个问题1。我应该如何打印出多个注解 2.@Metadata注解的类型是RUNTIMEAnnotationTarget.CLASS按之前讲解的无论调用什么方法他都应该打印出来(但是调用getAnnotation没有打印)3.为什么打印参数的时候能正确输出(字节码中参数被@NotNull修饰 为什么没打印出来)