JDK5.0新特性Annotation之自定义注解和@Target注解和@Documented注解

直接代码说话,说明信息详见注释。。

首先是自定义注解----JadyerAnnotation.java

package com.jadyer.annotation.custom; enum EnumTest { Hello, World, Welcome; } /** * It is a Marker Annotation * 也就是说Annotation名称本身即提供信息 * 对于程序分析工具来说,主要是检查是否有MarkerAnnotation的出现,并作出对应的动作 */ public @interface JadyerAnnotation { //在Annotation中定义属性时,需要在后面加上小括号,这和普通的类或接口是不同的 //当属性名为value时,那么在使用时直接应用诸如@JadyerAnnotation("Happy")便可 //但我们也可以为其另赋它值,如@JadyerAnnotation(value="very") String value(); //当属性名不叫value时,那么使用时就要显式的为其赋值,如@JadyerAnnotation(value22="LoveYou") String[] value11(); EnumTest value22() default EnumTest.Hello; //此时即设定了value33的默认值,那么在使用时直接@JadyerAnnotation也是可以的 //并且亦可为该属性重新设定值,如@JadyerAnnotation(value11="BigFoot"),它将使用BigFoot覆盖掉默认的Jadyer //String value33() default "Jadyer"; //对于一个Annotation来说,它里面元素的类型是有限制的 //只有原生数据类型、String、Class、annotation、enumeration以及这些类别的一维数组才可以 //Date date(); //非法 } /***************************【自定义Annotation类型】************************************************************/ //使用@interface自行定义Annotation型态时,实际上是隐式的自动继承java.lang.annotation.Annotation接口 //若我们显式的定义一个接口去继承Annotation接口的话,比如public interface Test extends Annotation{} //那么Test接口仍只是普通接口,不是注解。并且java.lang.annotation.Annotation本身只是接口,也不是注解 //并且在定义Annotation型态时,不能继承或实现其它的Annotation型态或者接口 //也就是说在注解类型的后面不能跟任何东西 /*************************************************************************************************************/

然后是自定义的使用@Target标注的注解----JadyerTarget.java

package com.jadyer.annotation.custom; import java.lang.annotation.ElementType; import java.lang.annotation.Target; @Target(ElementType.METHOD) public @interface JadyerTarget { String value(); } /********************【@Target可以用来限定Annotation的使用对象】***************************************************/ //java.lang.annotation.Target可以定义其使用时机,定义时要指定java.lang.annotation.ElementType枚举值之一 //java.lang.annotation.ElementType.TYPE-------------适用class, interface, enum //java.lang.annotation.ElementType.FIELD------------适用field //java.lang.annotation.ElementType.METHOD-----------适用method //java.lang.annotation.ElementType.PARAMETER--------适用method上之parameter //java.lang.annotation.ElementType.CONSTRUCTOR------适用constructor //java.lang.annotation.ElementType.LOCAL_VARIABLE---适用局部变量 //java.lang.annotation.ElementType.ANNOTATION_TYPE--适用annotation型态 //java.lang.annotation.ElementType.PACKAGE----------适用package //如果没有为自定义注解指定@Target的话,默认该注解可以使用在任何位置 /*************************************************************************************************************/

接着是自定义的使用@Documented标注的注解----JadyerDocumented.java

package com.jadyer.annotation.custom; import java.lang.annotation.Documented; @Documented public @interface JadyerDocumented { String hello(); } //使用者想要在制作JavaDoc文件的同时,也一并将Annotation的讯息加入至API文件中的话 //这时就需要使用java.lang.annotation.Documented注解标注即可

最后是自定义注解、@Target、@Documented的测试类----AnnotationUsage.java

package com.jadyer.annotation.custom; //@JadyerTarget("abc") //由于JadyerTarget被指定为ElementType.METHOD,故无法标注在class上面 public class AnnotationUsage { /** * This is the comments that I have added */ @JadyerDocumented(hello="Welcome") @JadyerTarget("xyz") @JadyerAnnotation(value="very", value11="{'so', 'good'}", value22=EnumTest.Welcome) public void methodTest() { System.out.println("usage of annotation"); } public static void main(String[] args) { AnnotationUsage usage = new AnnotationUsage(); usage.methodTest(); } } /***************************************************************************************************/ //我们可以使用JDK的javadoc命令,为当前类产生JavaDoc //该命令已经集成到了Eclipse中了,点击菜单栏Project---Generate Javadoc //然后在Select types for which Javadoc will be generated窗口中选中所要产生JavaDoc的具体类 //然后在Use Standard Doclet中选择生成的JavaDoc的保存路径,最后Finish即可 /***************************************************************************************************/ //注意:所要生成的JavaDoc的类以及该类所引用的类,它们的编码需要设为GBK //否则会报告:【编码 GBK 的不可映射字符】 /***************************************************************************************************/

补充:运行AnnotationUsage.java将在控制台输出usage of annotation

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值