快速业务通道

Java Annotation入门 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
由 “@+annotation类型+带有括号的成员-值列表”组成。这些成员的值必须是编译 时常量(即在运行时不变)。

A:下面是一个使用了RequestForEnhancement annotation的方法声明:

清单2:

@RequestForEnhancement(      id    = 2868724,      synopsis = "Enable time-travel",      engineer = "Mr. Peabody",      date   = "4/1/3007"    )    public static void travelThroughTime(Date destination) { ... }

B:当声明一个没有成员的annotation类型声明时,可使用以下方式:

清单3:

/**    * Indicates that the specification of the annotated API element    * is preliminary and subject to change.    */    public @interface Preliminary { }

作为上面没有成员的annotation类型声明的简写方式:

清单4:

@Preliminary public class TimeTravel { ... }

C:如果在annotations中只有唯一一个成员,则该成员应命名为value:

清单5:

/**    * Associates a copyright notice with the annotated API element.    */    public @interface Copyright {      String value();    }

更为方便的是对于具有唯一成员且成员名为value的annotation(如上文), 在其使用时可以忽略掉成员名和赋值号(=):

清单6:

@Copyright("2002 Yoyodyne Propulsion Systems")

public class OscillationOverthruster { ... }

Java Annotation入门(3)

时间:2011-05-20 blogjava cleverpig

3。一个使用实例:

结合上面所讲的,我们在这里建立一个简单的基于annotation测试框架。首先 我们需要一个annotation类型来表示某个方法是一个应该被测试工具运行的测试 方法。

清单7:

import java.lang.annotation.*;    /**    * Indicates that the annotated method is a test method.    * This annotation should be used only on parameterless static methods.    */    @Retention(RetentionPolicy.RUNTIME)    @Target(ElementType.METHOD)    public @interface Test { }

值得注意的是annotaion类型声明是可以标注自己的,这样的annotation被称 为“meta-annotations”。

在 上面的代码中,@Retention(RetentionPolicy.RUNTIME)这个meta- annotation表示了此类型的 annotation将被虚拟机保留使其能够在运行时通过反 射被读取。而@Target(ElementType.METHOD)表示此类型的 annotation只能用于 修饰方法声明。

下面是一个简单的程序,其中部分方法被上面的annotation所标注:

清单8:

public class Foo {      @Test public static void m1() { }      public static void m2() { }      @Test public static void m3() {        throw new RuntimeException("Boom");      }      public static void m4() { }      @Test public static void m5() { }      public static void m6() { }      @Test public static void m7() {        throw new RuntimeException("Crash");      }      public static void m8() { }    } Here is the testing tool:    import java.lang.reflect.*;    public class RunTests {     public static void main(String[] args) throws Exception {       int passed = 0, failed = 0;       for (Method m : Class.forName(args[0]).getMethods()) {        if (m.isAnnotationPresent(Test.class)) {          try {           m.invoke(null);

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