java注解

来源:互联网 发布:div js 显示隐藏 编辑:程序博客网 时间:2024/06/11 08:58

平时写代码,我们多多少少都有使用使用注解。
从jdk5开始java就新增加了Annotation(注解),包是java.lang.annotation ,通过中文api文档查阅知道。那就需要去知道元注解和自己定义的注解,sun给我们留下了4个基本类型的元注解:

  • Documented 指示某一类型的注释将通过 javadoc 和类似的默认工具进行文档化。
  • Inherited 指示注释类型被自动继承。
  • Retention 指示注释类型的注释要保留多久。
  • Target 指示注释类型所适用的程序元素的种类。

    @Documented
    @Retention(value=RUNTIME)
    @Target(value=ANNOTATION_TYPE)
    public @interface Documented指示某一类型的注释将通过 javadoc 和类似的默认工具进行文档化。应使用此类型来注释这些类型的声明:其注释会影响由其客户端注释的元素的使用。如果类型声明是用 Documented 来注释的,则其注释将成为注释元素的公共 API 的一部分。

@Documented
@Retention(value=RUNTIME)
@Target(value=ANNOTATION_TYPE)
public @interface Inherited指示注释类型被自动继承。如果在注释类型声明中存在 Inherited 元注释,并且用户在某一类声明中查询该注释类型,同时该类声明中没有此类型的注释,则将在该类的超类中自动查询该注释类型。此过程会重复进行,直到找到此类型的注释或到达了该类层次结构的顶层 (Object) 为止。如果没有超类具有该类型的注释,则查询将指示当前类没有这样的注释。

注意,如果使用注释类型注释类以外的任何事物,此元注释类型都是无效的。还要注意,此元注释仅促成从超类继承注释;对已实现接口的注释无效。

@Documented
@Retention(value=RUNTIME)
@Target(value=ANNOTATION_TYPE)
public @interface Retention指示注释类型的注释要保留多久。如果注释类型声明中不存在 Retention 注释,则保留策略默认为 RetentionPolicy.CLASS。

只有元注释类型直接用于注释时,Target 元注释才有效。如果元注释类型用作另一种注释类型的成员,则无效。

@Documented
@Retention(value=RUNTIME)
@Target(value=ANNOTATION_TYPE)
public @interface Target指示注释类型所适用的程序元素的种类。如果注释类型声明中不存在 Target 元注释,则声明的类型可以用在任一程序元素上。如果存在这样的元注释,则编译器强制实施指定的使用限制。 例如,此元注释指示该声明类型是其自身,即元注释类型。

理解上面的时候还需要去了解两个枚举:ElementType 和 RetentionPolicy。

public enum ElementTypeextends Enum
程序元素类型。此枚举类型的常量提供了 Java 程序中声明的元素的简单分类。
ANNOTATION_TYPE : 注释类型声明
CONSTRUCTOR : 构造方法声明
FIELD : 字段声明(包括枚举常量)
LOCAL_VARIABLE : 局部变量声明
METHOD : 方法声明
PACKAGE : 包声明
PARAMETER : 参数声明
TYPE : 类、接口(包括注释类型)或枚举声明

这些常量与 Target 元注释类型一起使用,以指定在什么情况下使用注释类型是合法的。
public enum RetentionPolicyextends Enum
注释保留策略。此枚举类型的常量描述保留注释的不同策略。它们与 Retention 元注释类型一起使用,以指定保留多长的注释。
CLASS : 编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。
RUNTIME :编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。
SOURCE :编译器要丢弃的注释。

自定义注解:

  使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)。可以通过default来声明参数的默认值。

  定义注解格式:
  public @interface 注解名 {定义体}

  注解参数的可支持数据类型:

    1.所有基本数据类型(int,float,boolean,byte,double,char,long,short)
    2.String类型
    3.Class类型
    4.enum类型
    5.Annotation类型
    6.以上所有类型的数组

0 0
原创粉丝点击