栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java批注反射顺序

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java批注反射顺序

这确实有点不足。让我们从可重复批注的Java 8功能入手,因为它有一些地方:

JLS第9.7.5节。相同类型的多个注释:

隐式声明的注释称为 容器注释 ,而出

T
现在上下文中的多个类型的 注释 称为 基础注释
value
容器批注的(数组类型)元素的元素都是在上下文中出现的从左到右顺序的所有基本批注。

因此,容器将按顺序提供重复的注释。

此外,的文档

AnnotatedElement
指定:

对于的调用

get[Declared]AnnotationsByType( Class < T >)
,计算直接或间接存在于元素 E
上的批注的顺序,就好像间接存在于 E 上的批注代替它们的容器批注直接出现在 E 上一样,按照它们在值中出现的顺序容器注释的元素。

将这两者放在一起,就意味着重复的注释之类

@Foo(1) @Foo(2)@Foo(3)
的存储方式就像您写过的一样
@FooContainer({@Foo(1), @Foo(2),@Foo(3)})
,而后者无论最初是如何创建的,都将被视为
getDeclaredAnnotations()
该顺序的直接存在的注释。

因此,重复注释的答案是顺序将是“它们出现的从左到右的顺序”。


但是我们可以从的文档中得出另一个结论

AnnotatedElement
。因为它指出注释的计算顺序就像直接存在的注释代替容器的注释直接存在一样,这意味着如果您编写
@Foo(1)@FooContainer({@Foo(2), @Foo(3)})
@FooContainer({@Foo(1), @Foo(2)})@Foo(3)
,则该顺序将与容器的元素相同,就像替换容器的元素一样你写过吗
@Foo(1) @Foo(2) @Foo(3)

有趣的是,如何实现的:

如果发现注释类型的注释类型直接或间接存在,

getDeclaredAnnotations()
则将被调用以确定返回数组中元素的顺序。

该实施说明是整个文档中

getDeclaredAnnotations()
顺序可靠的第一个指标。它用于确定履行上述合同所需的订单。

因此,答案是肯定的,

getDeclaredAnnotations()
以有保证的顺序提供注释,但是该信息未直接附加到方法本身的文档中。

这是从Java 8文档衍生而来的,但是由于Java 6和7现在已经寿终正寝,并且不会更改,因此,观察到的其实现的行为与至少为Java
8保证的行为相匹配的事实。 ,可能足以依靠它。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/469863.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号