【问题标题】:How is Reflection Implemented in Java?Java中的反射是如何实现的?
【发布时间】:2013-12-26 01:04:08
【问题描述】:

Java 7 语言规范很早就说了:

“本规范没有详细描述反射。”

我只是想知道:反射是如何在 Java 中实现的?

我不是在问它是如何使用的,我知道可能没有我正在寻找的具体答案,但任何信息将不胜感激。

我在 Stackoverflow 上找到了这个,关于 C# 的类似问题:How is reflection implemented in C#?

【问题讨论】:

  • 几乎是烟雾和镜子。许多native 方法在对象的内部徘徊。 native 方法几乎可以为所欲为。

标签: java reflection implementation


【解决方案1】:

任何反射活动的主要入口点是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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-12
    • 2015-05-01
    • 2014-12-30
    • 2023-03-13
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    相关资源
    最近更新 更多