java如何创建注解_Java如何自定义注解

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

一、创建自定义注解

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

importjava.lang.annotation.ElementType;

importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;

@Target(ElementType.METHOD) // 只对方法有效

@Retention(RetentionPolicy.RUNTIME) // 运行时有效public @interfacePersonInfo {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闪

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值