快速业务通道

Java Annotation手册 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
import java.lang.annotation.*; /** * 使用annotation来描述那些被标注的成员是不稳定的,需要更改 */ @Retention(RetentionPolicy.RUNTIME) public @interface Unstable {}

下面的另一个example只定义了一个成员。并通过将这个成员命名为value,使我们可以方便的使用这种annotation的快捷声明方式:

清单11:

/** * 使用Author这个annotation定义在程序中指出代码的作者 */ public @interface Author {    /** 返回作者名 */    String value(); }

Java Annotation手册(7)

时间:2011-05-20

以下的example更加复杂。Reviews annotation类型只有一个成员,但是这个成员的类型是复杂的:由Review annotation组成的数组。Review annotation类型有3个成员:枚举类型成员grade、表示Review名称的字符串类型成员Reviewer、具有默认值的字符串类型成员 Comment。

清单12:

import java.lang.annotation.*;      /** * Reviews annotation类型只有一个成员, * 但是这个成员的类型是复杂的:由Review annotation组成的数组 */ @Retention(RetentionPolicy.RUNTIME) public @interface Reviews {    Review[] value(); } /** * Review annotation类型有3个成员: * 枚举类型成员grade、   * 表示Review名称的字符串类型成员Reviewer、   * 具有默认值的字符串类型成员Comment。 */ public @interface Review {    // 内嵌的枚举类型    public static enum Grade { EXCELLENT, SATISFACTORY, UNSATISFACTORY };    // 下面的方法定义了annotation的成员    Grade grade();    String reviewer();    String comment() default ""; }

最后,我们来定义一个annotation方法用于罗列出类运行中所有的unchecked异常(上文已经提到这种情况不一定是错误)。这个 annotation类型将一个数组作为了唯一的成员。数组中的每个元素都是异常类。为了加强对未检查的异常(此类异常都是在运行时抛出)进行报告,我们可以在代码中对异常的类型进行限制:

清单13:

public @interface UncheckedExceptions {    Class<? extends RuntimeException>[] value(); }

Java Annotation手册(8)

时间:2011-05-20

五、Meta-Annotation

Annotation类型可以被它们自己所标注。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。这些类型和它们所支持的类在java.lang.annotation包中可以找到。如果需要更详细的信息可以参考 jdk5.0手册。

1.再谈Target

作为meta-annotation类型的Target,它描述了annotation所修饰的程序成员的类型。当一个annotation类型没有 Target时,它将被作为普通的annotation看待。当将它修饰一个特定的程序成员时,它将发挥其应用的作用,例如:Override用于修饰方法时,增加了@Target这个meta-annotation就使编译器对annotation作检查,从而去掉修饰错误类型的Override。

Target meta-annotation类型有唯一的value作为成员。这个成员的类型是java.lang.annotation.ElementType[]类型的,ElementType类型是可以被标注的程序成员的枚举类型。

2.Retention的用法

我们在文章的开头曾经提到过Retention,但是没有详细讲解。Retention描述了annotation是否被编译器丢弃或者保留在class 文件;如果保留在class文件中,是否在class文件被装载时被虚拟机读取。默认情况下,annotation被保存在class文件中,但在运行时并不能被反射访问。Retention具有三个取值:source、class、runtime,这些取值来自 java.lang.annotation.RetentionPolicy的枚举类型值。

Retention meta-annotation类型有唯一的value作为成员,它的取值来自ja

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号