You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何读取类上标注的ElementType.TYPE_USE类型注解@A?

类上TYPE_USE注解的读取异常问题分析

先看这段可正常编译的代码:

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE_USE })
@interface A {}

@A
final class B {}

这段代码编译完成后,无论是通过反射还是javax.lang.model API读取注解,都会出现异常情况:

具体问题表现

  • 反射场景:调用cls.getAnnotations()会错误地把@A当作类的声明注解返回,但@A的@Target并未包含ElementType.TYPE;而类型注解本应通过AnnotatedType获取,但无法为Class实例获取对应的AnnotatedType。
  • javax.lang.model场景:调用elements.getTypeElement("B").asType().getAnnotationMirrors()会返回空列表,该问题疑似关联JDK-8225377 Bug。

底层原因

查看编译生成的.class文件可以发现,字节码中不存在RuntimeVisibleTypeAnnotations属性,@A被错误写入到RuntimeVisibleAnnotations属性下,被当作类的声明注解处理。相关讨论已在compiler-dev邮件组发起。

内容的提问来源于stack exchange,提问作者Laird Nelson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 02:33:22