Java自定义注解

一般常见的注解有:

@Override  检测该注解标注的方法是否是继承自父类(接口)的

@Deprecated 表示已过时

@SuppressWarninngs 压制警告,eg:@SuppressWarnings("all") 在类前面加,整个类的警告被压制

自定义注解

格式:

Java自定义注解_第1张图片
注解格式

本质:注解本质上就是一个接口,该接口默认继承Annotation接口

      public interface MyAnno extends java.lang.annotation.Annotation{}

属性:接口中的抽象方法

    要求:1.属性的返回值类型有下列取值

                *基本数据类型

                *String

                *枚举

                *注解

                *以上类型的数组

        eg:

无元注解的自定义注解
Java自定义注解_第2张图片
枚举
Java自定义注解_第3张图片
无元数据的自定义注解

        2.定义了属性(方法),在使用时需要给属性赋值

        (1) 如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值。

        (2) 如果只有一个属性需要赋值,并且属性的名字是value,则value可以省略,直接定义值即可。

        (3) 数组赋值时,值使用{}包裹。如果数组中值只有一个,则{}可以省略。

eg:

自定义注解的使用
自定义注解的使用

元注解 :用于描述注解的注解 

@Target:描述注解能够作用的位置

    ElementType取值:TYPE:可以作用于类上;METHOD:可以作用于方法上;FIELD:可以作用于成员变量上。

@Retention:描述注解被保留的阶段

    @Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class类字节码文件中,并被JVM读取到。(RetentionPolicy.SOURCE只在源码中,不会到字节码中,RetentionPolicy.CLASS会保留到class类字节码文件中,不会被JVM读取到,一般自定义注解用RUNTIME)

@Documented:描述注解是否被抽取到api文档中

@Inherited:描述注解是否被子类继承

eg:

Java自定义注解_第4张图片
带元注解的自定义注解


带元注解的自定义注解的使用

在程序使用(解析)注解:获取注解中定义的属性值

1.获取注解定义的位置的对象(类Class、方法Method、变量Field)

2.获取指定的注解 *用getAnnotation()

3.调用注解中的抽象方法获取配置的属性值

eg:通过注解和反射获取执行ToastDemo类的showToast()方法

Java自定义注解_第5张图片
需要被执行的类


Java自定义注解_第6张图片
执行类

通过调用ReflectTest类中的runToastDemoMethod()就可以执行ToastDemo类的showToast()方法

你可能感兴趣的:(Java自定义注解)