回到顶部 暗色模式

Java注解

        注解为在代码中添加信息提供了一种形式化的方式。Java SE5内置了三种定义在 $java.lang$ 当中的注解:

        除此之外还有四种注解,用于创建新注解。

1. 语法

1.1 定义

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
    public int id();
    public String description() default "no description";
}

        注解的定义方式很像接口,也与接口一样会被编译为class文件。定义注解需要一些元注解。$@Target$ 定义注解的作用对象,如方法;$@Retention$ 定义的可用级别,分为源码 ( $SOURCE$ )、类文件 ( $CLASS$ )、运行时 ( $RUNTIME$ )。
        在定义注解时也可以设置一些元素表示一些值,不同于接口,你可以为这些值设置默认值。如果没有提供默认值,那么在使用注解的时候就必须进行赋值。没有元素的注解称为标记注解 ( $marker\ \ annotation$ )。可用的注解元素包括以下类型:

1.2 元注解

        Java内置了四种元注解:

2. 注解处理

        注解需要搭配注解处理器使用,可以通过反射机制创建自己的注解处理器。

public class TestTracker {
    public static void trackTestMethod(Class<?> c) {
        for (Method m : c.getDeclaredMethods()) {
            Test t = m.getAnnotation(Test.class);
            if (uc != null) {
                System.out.println(
                    m.getName()
                        + " use annotation @Test, id = "
                        + t.id()
                        + ", description"
                        + t.description());
            }
        }
    }
}

        通过传入 $Class$ 对象,可以获取到类的方法和注解。

Java注解