@target(elementtype.type_use)用于将注解精准标注在类型使用处,如泛型实参、数组元素、强制转换、new表达式、throws子句、方法返回值和参数类型等,而非类型声明本身;需配合@retention(retentionpolicy.runtime)才能在运行时通过反射获取,并依赖注解处理器或框架支持生效。

@Target(ElementType.TYPE_USE) 是 Java 8 引入的,用于将自定义注解精准标注在类型使用处,比如泛型参数、数组类型、强制转换、new 表达式、throws 子句等位置。它不是作用在“声明类型本身”,而是作用在“用到这个类型的地方”。
为什么需要 TYPE_USE?
普通 @Target(ElementType.TYPE) 只能加在类/接口/枚举声明上(如 @MyAnno class A {}),而 TYPE_USE 让你能在更细粒度的位置做语义标记,例如:
-
List -
new @Immutable ArrayList() -
(@Nullable String) obj void method() throws @CheckedIOException IOException
这些位置都属于「类型被使用」的上下文,TYPE_USE 就是为此设计的。
正确配置方式
@Target(ElementType.TYPE_USE)
@Retention(RetentionPolicy.RUNTIME)
public @interface NonNull {
}
⚠️ 注意:
-
ElementType.TYPE_USE不能单独存在于@Target中时就指望它生效——你还得配合@Retention(RetentionPolicy.RUNTIME),否则运行时反射拿不到; - 它不自动包含
TYPE_PARAMETER(泛型形参)、METHOD或FIELD,必须显式声明; - 编译器只做语法校验,真正起作用要靠注解处理器(APT)或运行时反射 + 框架支持(如 Spring、Hibernate Validator 5.2+、Checker Framework)。
常见可标注位置示例
以下代码中 @NonNull 若声明了 @Target(TYPE_USE),则合法:
- 泛型实参:
Map map; - 数组元素类型:
@NonNull String[] names;(注意:这是String类型被使用,不是字段本身) - 强制类型转换:
Object obj = ...; String s = (@NonNull String) obj; -
new表达式:List list = new @NonNull ArrayList(); -
throws子句:void read() throws @Checked IOException { ... } - 方法返回值类型(非方法本身):
@NonNull String getName() { ... }✅(这是返回类型的使用) - 方法参数类型:
void process(@NonNull String input)✅(这是参数类型的使用)
❌ 但以下写法不合法(除非同时声明 FIELD 或 METHOD):
-
@NonNull private String name;→ 这里@NonNull修饰的是字段声明,属于FIELD范畴 -
@NonNull public void doWork() { ... }→ 这里修饰的是方法声明,属于METHOD范畴
和 TYPE_PARAMETER 的区别
| 场景 | 示例 | 对应 ElementType |
|---|---|---|
| 标注泛型形参(定义时) | class Box { ... } |
TYPE_PARAMETER |
| 标注泛型实参(使用时) | Box box; |
TYPE_USE |
两者常共存,比如安全框架需要同时约束泛型定义和使用。
实战建议
- 如果你要做静态检查(如防止空指针、敏感数据泄露),优先用
TYPE_USE+ 注解处理器(如 Checker Framework); - 如果你希望 Spring 或 Jackson 在运行时识别(如反序列化校验),确保注解保留策略为
RUNTIME,并确认框架版本支持TYPE_USE(Spring 5.3+、Jackson 2.12+ 支持); - 不要省略
@Retention(RUNTIME)—— 否则反射读不到,AOP 或校验逻辑会静默失效; - 避免只写
@Target(TYPE_USE)却忘了实际使用场景是否真需要它;多数业务注解仍以METHOD/FIELD/TYPE为主,TYPE_USE属于进阶精细控制。
不复杂但容易忽略细节。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











