快速业务通道

Tiger中的注释,第2部分: 定制注释 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
  public void reallyConfusingMethod(int codePoint) {    // Really weird code implementation   }

对注释的注释

结束关于注释的讨论之前(至少在本系列文章中),我想简要地讨论一下注释的注释。第 1 部分中所接触的预定义注释类型都有预定义的目的。但是在编写自己的注释类型时,注释类型的目的并不总是显而易见的。除了基本的文档外,可能还要针对某个特定的成员类型或者一组成员类型编写类型。这就要求您为注释类型提供某种元数据,以便编译器保证按照预期的目的使用注释。

当然,首先想到的就是 Java 语言选择的元数据形式 —— 注释。您可以使用 4 种预定义的注释类型(称为 元注释)对您的注释进行注释。我将对这 4 种类型分别进行介绍。

指定目标

最明显的元注释就是允许何种程序元素具有定义的注释类型。毫不奇怪,这种元注释被称为 Target 。但是在了解如何使用 Target 之前,您还需要认识另一个类,该类被称为 ElementType ,它实际上是一个枚举。这个枚举定义了注释类型可应用的不同程序元素。清单 9 给出了完整的 ElementType 枚举:

清单 9. ElementType 枚举

package java.lang.annotation; public enum ElementType {   TYPE,  // Class, interface, or enum (but not annotation)   FIELD, // Field (including enumerated values)   METHOD, // Method (does not include constructors)   PARAMETER, // Method parameter   CONSTRUCTOR, // Constructor   LOCAL_VARIABLE, // Local variable or catch clause   ANNOTATION_TYPE, // Annotation Types (meta-annotations)   PACKAGE // Java package }

清单 9 中的枚举值意义很明确,您自己可以分析其应用的目标(通过后面的注解)。使用 Target 元注释时,至少要提供这些枚举值中的一个并指出注释的注释可以应用的程序元素。清单 10 说明了 Target 的用法:

清单 10. 使用 Target 元注释

package com.oreilly.tiger.ch06; import java.lang.annotation.ElementType; import java.lang.annotation.Target; /**   * Annotation type to indicate a task still needs to be completed   */ @Target({ElementType.TYPE,       ElementType.METHOD,       ElementType.CONSTRUCTOR,       ElementType.ANNOTATION_TYPE}) public @interface TODO {   String value(); }

现在,Java 编译器将把 TODO 应用于类型、方法、构造函数和其他注释类型。这样有助于避免他人误用您的注释类型(或者最好的地方是, 您自己也不会因为疲惫而误用它)。

Tiger中的注释,第2部分: 定制注释(4)

时间:2011-02-06 IBM Brett McLaughlin

设置保持性

下一个要用到的元注释是 Retention 。这个元注释和 Java 编译器处理注释的注释类型的方式有关。编译器有几种不同选择:

将注释保留在编译后的类文件中,并在第一次加载类时读取它。

将注释保留在编译后的类文件中,但是在运行时忽略它。

按照规定使用注释,但是并不将它保留到编译后的类文件中。

这三种选项用 java.lang.annotation.RetentionPolicy 枚举表示,如清单 11 所示:

清单 11. RetentionPolicy 枚举

package java.lang.annotation; public enum RetentionPolicy {   SOURCE, // Annotation is discarded by the compiler   CLASS, // Annotation is stored in the class file, but ignored by the VM   RUNTIME // Annotation is stored in the class file and read by the VM }

现在可以看出, Retention 元注释类型使用清单 11 所示的枚举值

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号