注解——四种元注解

Java提供了四个用于修饰自定义注解的元注解:
@Target、@Retention 、@Documented和@Inherited

@Target:

用于指定被修饰的自定义注解只能用于修饰程序中哪些元素,常用属性值有:
ElementType.FIELD:应用于全局属性
ElementType.METHOD:应用于方法
ElementType.PARAMETER:应用于方法的参数
ElementType.TYPE:应用于类、接口或者枚举声明

@Retention

@Retention:用于指定被修饰的自定义注解可以保留多久,该元注解有如下属性值:
RetentionPolicy.SOURCE:编译器将直接丢弃被修饰的注解。
RetentionPolicy.CLASS:默认值,编译器将把注解记录在class文件中,当运行Java程序时,虚拟机不再保留注解;
RetentionPolicy.RUNTIME:编译器将把注解记录在class文件中,当运行java程序时,虚拟机保留注解,程序可以通过反射获取该注解;

@Documented

执行javadoc命令时,被该元注解修饰的自定义注解也会生成在文档中

@Inherited

如果父类所使用的注解有@Inherited修饰,则子类可以继承该注解,否则不能继承。

综合例子:

@Target(ElementType.TYPE)//只能应用于类
@Retention(RetentionPolicy.RUNTIME)//由于是.RUNTIME,所以注解可以作用到运行时,所以控制台可以输出。默认为.CLASS,即作用到编译为class文件,无法作用到程序运行时,即无法作用到控制台。
@Inherited//如果不写该注解,则子类无法继承该注解,则控制台不会输出
public @interface Parent{
    String key();
    String value();
}

@Parent(key = "name", value = "张三")//自定义注解
public class Parent {

}

public class Son extends Parent {
    public static void main(String[] args) {
        Annotation[] annotations = Son.class.getAnnotations();
        // 控制台输出[@venus.Parent(key=name, value=张三)]
        System.out.println(Arrays.toString(annotations));
    }
}
发布了101 篇原创文章 · 获赞 3 · 访问量 2248

猜你喜欢

转载自blog.csdn.net/S_Tian/article/details/103887889