先自己写个注解:
@Retention(RUNTIME)
public @interface TestAnno {
String value() default "nul";
}
再进行测试:
@TestAnno
public class Test {
public static void main(String[] args) throws Exception {
var a = Test.class.getAnnotation(TestAnno.class);
var intr = a.annotationType();
var im = intr.getMethod("value");
System.out.println(im.invoke(a));
var proxy = a.getClass();
var pm = proxy.getMethod("value");
System.out.println(pm.invoke(a));
}
}
输出结果如下:
nul
Exception in thread "main" java.lang.IllegalAccessException: class info.tozzger.test.Test (in module info.tozzger.test) cannot access class com.sun.proxy.jdk.proxy1.$Proxy1 (in module jdk.proxy1) because module jdk.proxy1 does not export com.sun.proxy.jdk.proxy1 to module info.tozzger.test
at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:361)
at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:591)
at java.base/java.lang.reflect.Method.invoke(Method.java:558)
at info.tozzger.test/info.tozzger.test.Test.main(Test.java:14)
因此,在高版本的 JDK 中,应该使用 annotationType() 对注解进行操作。