java - Java中的反射是如何实现的?

标签 java reflection implementation

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/

相关文章:

java - Spring : Spring scheduler with fixed-rate param work incorrectly

java - libphonenumber 库不提取前缀为 +34 (0) 的电话号码

java - 无法合并Dex

Java API修改

java - 使用 csv 文件作为输入参数创建 getList 方法

java - 如何使用类中的参数返回特定方法的名称

java - 如何获取注解元素的默认值?

c# - 创建一个新的 AnonymousType 实例

java - JAXB 是规范还是实现?

java - LinkedHashMap 中的removeEldestEntry 是如何实现的以及该方法的运行时/复杂度是多少?