1. package cd.itcast.day2;  
  2.   
  3. import java.lang.reflect.Method;  
  4. import java.util.ArrayList;  
  5. import java.util.Arrays;  
  6. import java.util.Date;  
  7. import java.util.List;  
  8.   
  9. /** 
  10.  * 注解 
  11.  *  
  12.  * 注解的使用构成: 1,注解的申明 2,在类型(代码)上面打上注解 3,第三方的程序在使用打了注解的类型 
  13.  *  
  14.  * 作业:自己设计一套文档标签,如果我在一个类上面加了这些标签,我把这个类作为参数传给一个方法,就能为这个类的注释生成一个API文档文件 
  15.  *  
  16.  * @author Administrator 
  17.  *  
  18.  */  
  19. public class AnnotationDemo {  
  20.   
  21.     /** 
  22.      * 使用Annotation(使用反射来得到标签实例) <A extends Annotation> A getAnnotation(Class<A> 
  23.      * annotationClass):得到指定类型的注解实例 Annotation[] getAnnotations():得到该类型上面的所有注释实例 
  24.      * Annotation[] getDeclaredAnnotations() :返回直接存在于此元素上的所有注释。 boolean 
  25.      * isAnnotation() : 该类型是否是一个标签类型(Class) boolean isAnnotationPresent(Class<? 
  26.      * extends Annotation> annotationClass) :判断该类型上面是否有指定的标签类型 
  27.      *  
  28.      * @param args 
  29.      */  
  30.     public static void main(String[] args) throws Exception {  
  31.         Class<User> c = User.class;  
  32.         // 说明:annotation也是一种类型  
  33.         // Class a=MyAnn.class;  
  34.         if (c.isAnnotationPresent(MyAnn.class)) {  
  35.             System.out.println("hello");  
  36.             MyAnn ann = c.getAnnotation(MyAnn.class);  
  37.             System.out.println(ann.name());  
  38.             System.out.println(Arrays.toString(ann.names()));  
  39.             System.out.println(ann.resetDay());  
  40.   
  41.             OtherAnn other = ann.other();  
  42.             System.out.println("other   " + other.value());  
  43.         } else {  
  44.             System.out.println("fck");  
  45.         }  
  46.   
  47.         Method m = c.getDeclaredMethod("getName");  
  48.         if (m.isAnnotationPresent(MyAnn.class)) {  
  49.             System.out.println("方法上面有标签");  
  50.         }  
  51.     }  
  52.   
  53.     /** 
  54.      * @SuppressWanings:去掉警告,(去掉警告的类型写在后面括号里面) 标签有自己定义的能放置的位置 
  55.      */  
  56.     @SuppressWarnings(value = "deprecation")  
  57.     public void dateTest() {  
  58.         Date d = new Date();  
  59.         System.out.println(d.toLocaleString());  
  60.         AnnotationDemo dd = new AnnotationDemo();  
  61.         dd.someThing();  
  62.     }  
  63.   
  64.     /** 
  65.      * 标签里面可以有值, 1,一个常量值 2,一个数组 
  66.      *  
  67.      * @Deprecated:方法过时 
  68.      */  
  69.     @SuppressWarnings({ "rawtypes", "unused" })  
  70.     @Deprecated  
  71.     public void someThing() {  
  72.         List a = new ArrayList();  
  73.     }  
  74.   
  75.     /** 
  76.      * 注释一个标签。这个标签没有参数值 
  77.      *  
  78.      * @Override:代表当前方法是覆盖一个父类的方法 
  79.      */  
  80.     @Override()  
  81.     public String toString() {  
  82.         return super.toString();  
  83.     }  
  84.   
  85. }  
  86.   
  87. package cd.itcast.day2;  
  88.   
  89. import java.lang.annotation.ElementType;  
  90.   
  91. /** 
  92.  * 自定义一个注释 
  93.  * @author Administrator 
  94.  *  
  95.  * @Retention:规定定义的这个标签保留到什么时候 
  96.  * @Target:规定定义的这个标签能加载哪些位置 
  97.  * ANNOTATION_TYPE:标签上面 
  98.  * Constructor:构造器上面 
  99.  * Field:字段 
  100.  * Local variable:局部变量 
  101.  * METHOD:方法/方法的返回类型 
  102.  * PACKAGE:包 
  103.  * Parmater:方法参数 
  104.  * TYPE:类/接口/枚举 
  105.  */  
  106. @Target({ElementType.METHOD,ElementType.TYPE})  
  107. @Retention(RetentionPolicy.RUNTIME)  
  108. public @interface MyAnn {  
  109.     /** 
  110.      * 在标签里面加参数 类型 属性名称() [default 类型的值] 
  111.      * 注意:如果在标签里面仅有value这个属性要填,在使用的时候就可以忽略不写 
  112.      */  
  113.     String name() default "itcast";  
  114.       
  115.     String[] names() default {};  
  116.       
  117.     String value();  
  118.       
  119.     WeekDays resetDay();  
  120.       
  121.     OtherAnn other();  
  122.       
  123. }  
  124.   
  125.   
  126. package cd.itcast.day2;  
  127.   
  128. public @interface OtherAnn {  
  129.     String value();  
  130. }  
 
posted on 2015-07-30 20:28  小光zfg  阅读(116)  评论(0)    收藏  举报