我正在阅读Java语言规范(JLS):annotations
注释表示注释类型的特定调用 (§9.6)
在9.6中:
注释类型声明指定了新的注释类型,即 一种特殊的接口类型。
例如@annotation1
应该调用注释类型annotation1
。我找不到信息,这是网页搜索或此处的问题的意思。我发现的所有内容仅涉及接口的方法的调用,而不涉及接口类型的调用。我已经阅读了一些内置注释的原因,例如臭名昭著的@Override
,但是我希望通过JLS链接获得清晰的知识,因为我已经阅读了许多我想有效使用的有用框架所使用的注释,因此接口类型调用是什么。
答案 0 :(得分:2)
如果您编写@SomeAnnotation
,则基本上是在该注释类型的实例中创建的(可能会有一些缓存,但我不知道这一点)。当注释具有数据时,例如,这尤其明显。 @SomeAnnotation(name="Alexei")
。在这种情况下,您可以获取类型为SomeAnnotation
的注释实例,然后对其调用name()
以获取值"Alexei"
)。
我已经阅读了许多要有效使用的有用框架的注释。
大多数框架都使用反射来检查您的类并收集有关注释的信息,例如通过Class.getAnnotation(SomeAnnotation.class)
和许多其他类似方法。然后,该信息将用于框架需要执行的任何操作,例如CDI将使用范围注释来构建其内部bean存储库。
要使用这些框架,您不必了解它们如何使用注释或调用实际上意味着什么的细节。只需使用注释本身,因为框架需要您这样做。
如果要开发自己的框架,然后,则可能需要更多信息,尤其是有关反射功能的信息。
答案 1 :(得分:1)
据我对您发布的链接的了解,注释类型是特殊接口类型,在这种情况下,不应认为 invocation 表示与上述相同的调用一种方法。编译器会插入带有代码的标记,以后可以使用它们(或像@override
一样在编译过程中使用它们)。