反射在Java中是如何实现的?

s4n0splo  于 2023-05-21  发布在  Java
关注(0)|答案(1)|浏览(105)

Java 7语言规范很早就说过:
“本说明书没有详细描述反射.”
我只是在想如何在Java中实现Reflection?
我不是问它是如何使用的,我知道可能没有一个具体的答案,我正在寻找,但任何信息将不胜感激。
我在Stackoverflow上发现了这个问题,关于C#的类似问题:How is reflection implemented in C#?

ttp71kqs

ttp71kqs1#

任何反射活动的主入口点都是Class类。您可以从中获取MethodFieldClassConstructorAnnotation示例。
如果查看源代码,您会注意到要检索上述任何内容,Java必须进行native调用。比如说

private native Field[]       getDeclaredFields0(boolean publicOnly);
private native Method[]      getDeclaredMethods0(boolean publicOnly);
private native Constructor<T>[] getDeclaredConstructors0(boolean publicOnly);
private native Class<?>[]   getDeclaredClasses0();
private native byte[] getRawAnnotations(); // get converted to Annotation instances later

实现是在原生C代码(和/或C++)中完成的。每个JDK可能不同,但是如果有源代码并且您有耐心,您可以查找它。有关OpenJDK源代码的详细信息可以在in this question中找到。

相关问题