(25)Jdk中的常用注解————概念及应用

JDK内置的三个基本注解

1, @Override:限定重写父类方法,该注解只能用于方法

2, @Deprecated:用于表示所修饰的元素(类,方法等)已过时。通常是因为所修饰的结构危险

3, @SuppressWarnings:抑制编译器警告

jdk提供的4种元注解

元注解:对现有的注解进行解释说明的注解

1,Retention(常用)
@Retention:只能用于修饰一个Annotation定义,用于指定该Annotation的生命周期,@Rentention包含一个RetentionPolicy类型的成员变量,使用@Rentention时,必须为该value成员变量指定值:

RetentionPolicy.SOURCE:在源文件中有效(即源文件保留),编译器直接丢弃这种政策的注解

RetentionPolicy.CLASS:在class文件中有效(即class保留),当运行Java程序时,JVM不会保留注解,这是默认值

RententionPolicy.RUNTIME:在运行时有效(即运行时保留),当运行Java程序时,JVM会保留注释。程序可以通过反射获取该注释。

在这里插入图片描述

2,Target(常用)

@Target:用于修饰Annotation定义,用于指定被修饰的Annotation能用于修饰哪些程序元素。@Target也包含一个名为value的成员变量。

成员变量 描述
CONSTRUCTOR 用于描述构造器
FIELD 用于描述域(属性)
LOCAL_VARIABLE 用于描述局部变量
METHOD 用于描述方法
PACKAGE 用于描述包
PARAMETER 用于描述参数
TYPE 用于描述类,接口(包括注解类型)或enum声明

3,Documented

@Documented:用于指定被该元Annotation修饰的Annotation类将被javadoc工具提取成文档。默认情况下,javadoc是不包括注解的。

注意: 定义为Documented的注解必须设置Retention值为RUNTIME。

4,Inherited

@Inherited:被它修饰的Annotation将具有继承性。如果某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解。

比如:如果把标有@Inherited注解的自定义的注解的自定义

  • 可重复注解:@Repeatable

@Repeatable :jdk8中可重复注解,类型注解。使用注意:注解中的Target和Retention等要保持一致

  • 类型注解

ElementType.TYPE_PARAMETER 表示该注解能写在类型变量的声明语句中(如:泛型声明)

ElementType.TYPE_USE 表示该注解能写在使用类型的任何语句中

注解的应用如下

@Target({TYPE, METHOD, FIELD,PARAMETER,TYPE_PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface Statuss {

    Status[] value();
}
@Repeatable(Statuss.class)
@Target({TYPE, METHOD, FIELD,PARAMETER,TYPE_PARAMETER,TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Status {

    String value() default "未付款";
}

注解的测试与校验

@Status(value = "付款")
@Status(value = "已付款")
class Person<@Status T>{

    public static void main(String[] args) {
        Class<@Status Person> personClass = Person.class;
        Annotation[] annotations = personClass.getAnnotations();
        for (Annotation annotation :annotations) {
            System.out.println(annotation);
        }
    }
}

下一章,(26)Java中程序,线程,进程的理解

发布了67 篇原创文章 · 获赞 19 · 访问量 9875

猜你喜欢

转载自blog.csdn.net/qq_41530004/article/details/103695889