Java 7 语言规范很早就说了:
"this specification does not describe reflection in any detail."
我只是想知道:反射是如何在 Java 中实现的?
我不是在问它是如何使用的,我知道可能没有我正在寻找的具体答案,但我们将不胜感激任何信息。
我在 Stackoverflow 上找到了这个,关于 C# 的类似问题:How is reflection implemented in C#?
最佳答案
任何反射 Activity 的主要入口点都是 Class
类。从中你可以得到Method
, Field
, Class
, Constructor
, and Annotation
实例。
如果您查看源代码,您会注意到要检索上述任何内容,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 .
关于java - Java中的反射是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20461851/