Java 注解 Annotation

作用

  为 Java 代码提供元数据,类似于生活中的标签;

注解的属性(元数据)

  注解的属性也叫做成员变量,注解只有成员变量,没有方法。注解属性的定义方式为:以“无形参的方法”形式来声明,其方法名定义了该成员变量的名字,其返回值定义了该成员变量的类型,如下所示:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation {

    int id();

    String msg();

}

注解元数据的获取

  反射。从Class中获取注解元数据的代码示例如下:

@TestAnnotation()
public class Test {

    public static void main(String[] args) {

        boolean hasAnnotation = Test.class.isAnnotationPresent(TestAnnotation.class);

        if ( hasAnnotation ) {
            TestAnnotation testAnnotation = Test.class.getAnnotation(TestAnnotation.class);

            System.out.println("id:"+testAnnotation.id());
            System.out.println("msg:"+testAnnotation.msg());
        }

    }

}

Java 元注解

@Retention

当 @Retention 应用到一个注解上的时候,它解释说明了这个注解的的存活时间。它的取值如下:

  1. RetentionPolicy.SOURCE 注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视;
  2. RetentionPolicy.CLASS 注解只被保留到编译进行的时候,它并不会被加载到 JVM 中;
  3. RetentionPolicy.RUNTIME 注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们

@Retention

  将注解中的元素包含到 Javadoc 中去。

@Target

指定注解的应用场景,主要有以下几种:

  • ElementType.ANNOTATION_TYPE 可以给一个注解进行注解;
  • ElementType.CONSTRUCTOR 可以给构造方法进行注解;
  • ElementType.FIELD 可以给属性进行注解;
  • ElementType.LOCAL_VARIABLE 可以给局部变量进行注解;
  • ElementType.METHOD 可以给方法进行注解;
  • ElementType.PACKAGE 可以给一个包进行注解;
  • ElementType.PARAMETER 可以给一个方法内的参数进行注解;
  • ElementType.TYPE 可以给一个类型进行注解,比如类、接口、枚举;

@Inherited

  允许子类继承父类的注解

参考:

  1. http://zy19982004.iteye.com/blog/1979520
  2. https://blog.csdn.net/briblue/article/details/73824058/

猜你喜欢

转载自blog.csdn.net/yangguosb/article/details/80868012