[Java] annotationType()和getClass() 在 Java 11 中的区别

先自己写个注解:

@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() 对注解进行操作。

[C++] 骑士救公主

期末作业,码字码了2个小时,不发上来感觉自己亏了一个亿。以下是实践报告节选。


一些恶魔抓住了公主(P)并将她关在了地下城的右下角。地下城是由 M×N 个房间组成的二维网格。我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。

继续阅读[C++] 骑士救公主