|
发表于 2025-4-2 22:06:42
|
显示全部楼层
Java注解(Annotation)详解
注解(Annotation)是Java中用于添加元数据的特殊语法,相当于代码的标签。下面通过语法规则、元注解和应用场景三部分展开说明:
一、基本语法
- 定义注解:
- public @interface 注解名称 {
- 数据类型 属性名() default 默认值; // 类似接口方法
- }
复制代码
- 使用示例:
- @MyAnnotation(name = "示例", version = 1)
- public class Demo {}
复制代码
二、核心元注解
这些注解用于修饰其他注解的定义:
- @Target:指定注解作用目标
- @Target(ElementType.METHOD) // 只能标注方法
- public @interface TestAnnotation {}
复制代码
支持的ElementType类型:
- TYPE(类/接口/枚举)
- FIELD(字段)
- METHOD(方法)
- PARAMETER(参数)
- CONSTRUCTOR(构造器)
- LOCAL_VARIABLE(局部变量)
- ANNOTATION_TYPE(注解)
- PACKAGE(包)
- @Retention:控制注解生命周期
- @Retention(RetentionPolicy.RUNTIME) // 运行时可见
- public @interface RuntimeAnnotation {}
复制代码
策略说明:
- SOURCE:仅源码保留(如@Override)
- CLASS:编译后保留(默认值)
- RUNTIME:运行时可通过反射读取
- @Inherited:允许子类继承父类注解
- @Inherited
- @Retention(RetentionPolicy.RUNTIME)
- public @interface InheritableAnnotation {}
复制代码
- @Documented:使注解出现在Javadoc中
- @Documented
- public @interface DocAnnotation {}
复制代码
- @Repeatable:允许重复标注(需容器注解)
- @Repeatable(Fish.class)
- public @interface FishFood {
- String value();
- }
- public @interface Fish {
- FishFood[] value();
- }
- // 使用示例
- @FishFood("虾米")
- @FishFood("海藻")
- public class Aquarium {}
复制代码
三、典型应用场景
- 编译检查:@Override、@Deprecated
- 框架配置:Spring的@Autowired
- 代码生成:Lombok的@Data
- 单元测试:JUnit的@Test
四、反射读取注解示例
- Class<Demo> clazz = Demo.class;
- if(clazz.isAnnotationPresent(MyAnnotation.class)){
- MyAnnotation annotation = clazz.getAnnotation(MyAnnotation.class);
- System.out.println("Name: " + annotation.name());
- }
复制代码
提示:合理使用注解可以使代码更简洁,但要避免过度设计。元注解就像注解的基因,决定了注解的基础特性。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|