背后的概念是什么:类型-元素-镜子

2024-01-29

我正在使用 Java 6 的注释处理,即可以在其中找到什么javax.annotation.processing(不是 Java 5 的 APT)。

我想知道各种之间的概念差异是什么Element, Type, and Mirror类群岛由于我不太明白这一点,因此很难有效地对注释处理器进行编程。有多种方法可以在这些概念之间进行“转换”,但我不太确定使用它们时我在做什么。

例如,让我举一个例子AnnotationMirror.
当我打电话时getAnnotationType()我得到一个实例DeclaredType(它实现了TypeMirror无论出于何种原因)。
然后我可以打电话asElement()在此并获得一个实例Element.
发生了什么事?


这些概念之间确实存在重叠。

  • Element对程序的静态结构进行建模,即包、类、方法和变量。想想您在 Eclipse 的包资源管理器中看到的所有内容。

  • Type对程序的静态定义类型约束进行建模,即类型、泛型类型参数、泛型类型通配符。想想属于 Java 类型声明一部分的所有内容。

  • Mirror是 Gilad Bracha 和 Dave Ungar 最初为 Self(一种基于原型的 Smalltalk 方言)开发的反射的替代概念。基本思想是将有关代码结构的查询(以及结构的运行时操作,可惜在 Java 中不可用)与域对象分开。因此,要查询对象的方法,而不是调用#getClass你可以向系统请求一面镜子,通过它你可以看到物体的反射。由于这种分离,您还可以镜像未加载的类(如注释处理期间的情况),甚至远程映像中的类。例如,V8(Google 的 Javascript 引擎)使用镜像来调试在另一个对象空间中运行的 Javascript 代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

背后的概念是什么:类型-元素-镜子 的相关文章

随机推荐