跳转至

注解

注解(Annotation)是 Java 提供的一种元数据形式,用于为代码添加额外的信息,这些信息可以被编译器、开发工具或运行时环境使用。

1. 内置注解

Java 提供了一些内置注解: - @Override:标记方法覆盖父类方法。 - @Deprecated:标记方法或类已过时。 - @SuppressWarnings:抑制编译器警告。

示例

class Parent {
    void display() {
        System.out.println("Parent");
    }
}

class Child extends Parent {
    @Override
    void display() {
        System.out.println("Child");
    }

    @Deprecated
    void oldMethod() {
        System.out.println("Deprecated method");
    }
}

2. 自定义注解

通过 @interface 关键字可以定义自定义注解。

示例

1
2
3
4
5
6
7
8
import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
    String value() default "default";
    int priority() default 0;
}

3. 元注解

元注解用于注解其他注解: - @Retention:指定注解的保留策略(SOURCE/CLASS/RUNTIME)。 - @Target:指定注解可以应用的目标(类/方法/字段等)。 - @Documented:标记注解包含在 Javadoc 中。 - @Inherited:标记注解可以被子类继承。

4. 注解处理

通过反射可以在运行时读取注解信息。

示例

import java.lang.reflect.Method;

public class AnnotationProcessor {
    public static void processAnnotations(Object obj) {
        Class<?> clazz = obj.getClass();
        for (Method method : clazz.getMethods()) {
            if (method.isAnnotationPresent(MyAnnotation.class)) {
                MyAnnotation annotation = method.getAnnotation(MyAnnotation.class);
                System.out.println("Method: " + method.getName() + ", Value: " + annotation.value());
            }
        }
    }
}

5. 常见应用场景

  • 框架配置(如 Spring 的 @Autowired)。
  • 代码生成(如 Lombok)。
  • 测试框架(如 JUnit 的 @Test)。

总结

注解是 Java 强大的元编程工具,合理使用可以简化代码并提高可维护性。