• Java如何自定义注解


      本文主要是记录所学,以供后续参考。注解是Java 1.5引入的,Java自定义注解是通过运行时靠反射获取注解,注解相当于是一种嵌入在程序中的元数据,可以使用注解解析工具或编译器对其进行解析,也可以指定注解在编译期或运行期有效。在注解诞生之前,程序的元数据存在的形式仅限于java注释或javadoc,但注解可以提供更多功能,它不仅包含元数据,还能作用于运行期,注解解析器能够使用注解决定处理流程。

      一、创建自定义注解

      创建自定义注解与编写接口很相似,只是在接口关键字前面添加@符合。

    import java.lang.annotation.ElementType;
    import
    java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.METHOD) // 只对方法有效 @Retention(RetentionPolicy.RUNTIME) // 运行时有效 public @interface PersonInfo { String name() default ""; String id() default "";
    }

     在PersonInfo注解中定义了两个name和id两个方法。注解方法不能有参数,但可以有默认值;返回的类型局限于原始类型、字符串、枚举、注解或以上类型构成的数值。

    在注解中可以包含与其绑定的元注解,元注解为注解提供信息,有四种元注解类型,如下说明:

      1. @Documented – 表示使用该注解的元素应被javadoc或类似工具文档化,它应用于类型声明,类型声明的注解会影响客户端对注解元素的使用。如果一个类型声明添加了Documented注解,那么它的注解会成为被注解元素的公共API的一部分。

      2. @Target – 用于描述修饰对象的范围,范围取值于ElementType这个枚举类:TYPE(类、接口(包括注释类型)或枚举声明)、METHOD((方法声明)、 CONSTRUCTOR(构造方法声明)、 FIELD(字段声明)、ANNOTATION_TYPE(注释类型声明)、LOCAL_VARIABLE(局部变量声明)、PACKAGE(包声明)、PARAMETER(参数声明)。如果Target元注解不存在,那么该注解就可以使用在任何程序元素之上。

      3. @Inherited – 表示一个注解类型会被自动继承,如果用户在类声明的时候查询注解类型,同时类声明中也没有这个类型的注解,那么注解类型会自动查询该类的父类,这个过程将会不停地重复,直到该类型的注解被找到为止,或是到达类结构的顶层(Object)。

      4. @Retention – 表示注解类型保留时间的长短,范围取值于RetentionPolicy这个枚举类:

      (1)CLASS 编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释

      (2)RUNTIME  编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取

      (3)SOURCE 编译器要丢弃的注释

      二、使用自定义注解
      注解保持性策略应该是RUNTIME,否则它的信息在运行期无效,我们也不能从中获取任何数据。
      


    ------20191224闪

  • 相关阅读:
    AUTOSAR-文档阅读
    前端 html
    http协议
    python格式化输出
    IO模型
    协程函数
    伟大的GIL
    苑之歌(进程,线程)
    python之模块导入和包
    任性计算器
  • 原文地址:https://www.cnblogs.com/bien94/p/12093311.html
Copyright © 2020-2023  润新知