在Java中设计和使用自己的注解(转载)

我们用过JDK给我们提供的 @Override @Deprecated @SuppressWarning 注解 ,这些注解是JDK给我们提供的,我们只是在用别人写好的东西,那么我们是否可以自己写注解呢?当然是可以的。

我们写的注解包括三个环节:

1、 注解的声明,也就是注解类的定义。

形式如下 @interface 来进行注解的声明。

 
 
  1. package me.test;     

  2.  

  3. import java.lang.annotation.* ;//导入注解包中所有注解  

  4.  

  5. @Retention(RetentionPolicy.RUNTIME)   //解释如下  

  6.  

  7. @Target(ElementType.TYPE)//解释如下  

  8.  

  9. public @interface MyAnnotation               

  10. {   

  11.  

  12. }  

  13.  

  14. @Retention(RetentionPolicy.RUNTIME)  

指定了注解保留的周期,注解的生命周期有是三个,RetentionPolicy 枚举的三个值代表了三个声明周期,默认是CLASS。


枚举常量摘要CLASS
          编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。RUNTIME
          编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。SOURCE
          编译器要丢弃的注释。


@Target(ElementType.TYPE)

这个标识注解应该标在那里ElementType的几个枚举值就代表了,注解应该写在的位置。


CONSTRUCTOR
          构造方法声明FIELD
          字段声明(包括枚举常量)LOCAL_VARIABLE
          局部变量声明METHOD
          方法声明PACKAGE
          包声明PARAMETER
          参数声明TYPE
          类、接口(包括注释类型)或枚举声明


2、 使用了注解的类或者方法。

 
 
  1. @MyAnnotation 

  2. class  A  

  3. {  

3、 利用反射来操作注解,详细见代码。

Class类有一个方法:


<A extends Annotation> 
A   getAnnotation(Class<A> annotationClass)


这个方法接受一个注解的字节码参数 ,然后返回这个类所标识的注解对象 ,因为我们标识了一个注解就相当于产生了一个注解对象 。


booleanisAnnotationPresent(Class<? extends Annotation> annotationClass)


这个方法判断一个类是否被注解所标识。

下面是代码示例:

MyAnnotationTest.java中

 
 
  1. package me.test;  

  2. import java.lang.annotation.Annotation;  

  3. @MyAnnotation 

  4. public class MyAnnotationTest  

  5. {   

  6.  

  7.     public static void main(String []args)  

  8.     {  

  9.      if(MyAnnotationTest.class.isAnnotationPresent( MyAnnotation.class))  

  10.      {  

  11.        MyAnnotation an=(MyAnnotation)MyAnnotationTest.class.getAnnotation(MyAnnotation.class) ;  

  12.        System.out.println(an.toString());  

  13.      }  

  14.     }  

MyAnnotation.java中

 
 
  1. package me.test;  

  2. import java.lang.annotation.ElementType;  

  3. import java.lang.annotation.Retention;  

  4. import java.lang.annotation.RetentionPolicy;  

  5. import java.lang.annotation.Target;  

  6. @Retention(RetentionPolicy.RUNTIME)  

  7. @Target(ElementType.TYPE)  

  8. public @interface MyAnnotation  

  9. {   

  10.  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值