java Annotation

来源:互联网 发布:java 多线程 回调函数 编辑:程序博客网 时间:2024/06/14 17:18

@Retention

  1. 使用方式

@Retention(SOURCE/CLASS/RUNTIME)
public/default @interface Annotation名称{…}

  • SOURCE: Annotation信息在编译阶段被丢弃,仅保留在java源文件中
  • CLASS(默认):Annotation信息在编译阶段被保留,保留到class文件中,但运行阶段不存在
  • RUNTIME:Annotation信息一直保留到运行阶段,知道退出虚拟机才被丢弃
  • 以上三个值是java.lang.annotation.RetentionPolicy这个类所提供的枚举值
  • 作用
  • 控制被Retention注释的Annotation信息的保留时间的长短

@Target

@Target({TYPE,METHOD,FIELD})
public/default @interface Annotation名字{…}

范围 描述 public static final ElementType TYPE 只能在类、接口、枚举中使用 public static final ElementType FIELD 成员变量使用 public static final ElementType METHOD 方法中使用 public static final ElementType PARAMETER 在参数上使用 public static final ElementType CONSTRUCTOR 在构造中使用 public static final ElementType LOCAL_VARIABLE 局部变量上使用 public static final ElementType ANNOTATION_TYPE 只能在Annotation中使用 public static final ElementType PACKAGE 只能在包中使用

作用:表示的是一个Annotation的使用范围

自定义Annotation

自定义Annotation语法如下:
访问修饰符 @interface Annotation名称{
返回类型 method1() [default 默认值];


特点:

  • Annotation类型使用关键字@interface而不是interface
  • Annotation类型的方法必须声明为无参数,无异常抛出。这些方法定义了 Annotation的成员:方法名成为了成员名,而方法返回值成了成员类型。
  • 方法返回值类型必须为private类型、String类型,Class类型、枚举类型、 annotaion类型或由前米娜类型之一作为元素的唯一数组。
  • 方法的后面可以使用 default 和 一个默认数值来声明成员的默认值。null不能作为成员默认值。
  • 在定义Annotation型态时,不能继承其它的Annotation型态或是接口。
原创粉丝点击