android反射组件 (一个)java 它们的定义annotation基础知识

它们的定义annotation它由三部分组成: 它们的定义annotation、使用annotation班、annotation的处理方法。

一、自己定义annotation

       元注解包含下面:

           1)@Target    描写叙述注解使用的范围

 取值包含:

1.CONSTRUCTOR:用于描写叙述构造器
2.FIELD:用于描写叙述域
3.LOCAL_VARIABLE:用于描写叙述局部变量
4.METHOD:用于描写叙述方法
5.PACKAGE:用于描写叙述包
6.PARAMETER:用于描写叙述參数
7.TYPE:用于描写叙述类、接口(包含注解类型) 或enum声明    

          2) @Retention  定义了注解被保留的时间段

取值包含:

1.SOURCE:在源文件里有效(即源文件保留)
2.CLASS:在class文件里有效(即class保留)
3.RUNTIME:在执行时有效(即执行时保留)

           3)@Documented   能否够被工具文档化

           4)@Inherited  注解能否够被子类继承


   实例代码:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. @Target(ElementType.FIELD)  
  2. @Retention(RetentionPolicy.RUNTIME)  
  3. @Documented  
  4. public @interface FruitName {  
  5.       
  6.     public String value() default "";  
  7.       
  8. }  
  9.   
  10. @Target(ElementType.FIELD)  
  11. @Retention(RetentionPolicy.RUNTIME)  
  12. @Documented  
  13. public @interface FruitColor {  
  14.   
  15.     public enum Color {BULE, RED, GREEN}  
  16.       
  17.     public Color fruitColor() default Color.GREEN;  
  18.       
  19. }  


二、使用annotation的类

   实例代码:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public class Apple {  
  2.       
  3.     @FruitName("Apple")  
  4.     private String appleName;  
  5.       
  6.     @FruitColor(fruitColor=FruitColor.Color.RED)  
  7.     private String appleColor;  
  8.       
  9.     public void setAppleColor(String appleColor) {  
  10.         this.appleColor = appleColor;  
  11.     }  
  12.     public String getAppleColor() {  
  13.         return appleColor;  
  14.     }  
  15.       
  16.       
  17.     public void setAppleName(String appleName) {  
  18.         this.appleName = appleName;  
  19.     }  
  20.     public String getAppleName() {  
  21.         return appleName;  
  22.     }  
  23.       
  24.     public void displayName(){  
  25.         System.out.println("水果的名字是: "+ appleName + " 水果的颜色是:"+ appleColor);  
  26.     }  
  27.       
  28. }  

三、annotation处理方法

   实例代码:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public class FruitInfoUtil {  
  2.   
  3.     public static void getFruitInfo(Object obj){  
  4.         Class<?

    > clazz = obj.getClass();  

  5.         Field[] fields = clazz.getDeclaredFields();  
  6.           
  7.         for(Field field : fields){  
  8.             if(field.isAnnotationPresent(FruitName.class)){  
  9.                 FruitName fruitName = (FruitName)field.getAnnotation(FruitName.class);  
  10.                 try {  
  11.                     field.setAccessible(true);  
  12.                     field.set(obj, fruitName.value());  
  13.                 } catch (IllegalArgumentException e) {  
  14.                     e.printStackTrace();  
  15.                 } catch (IllegalAccessException e) {  
  16.                     e.printStackTrace();  
  17.                 }  
  18.             }else if(field.isAnnotationPresent(FruitColor.class)){  
  19.                 FruitColor fruitColor = (FruitColor)field.getAnnotation(FruitColor.class);  
  20.                 try {  
  21.                     field.setAccessible(true);  
  22.                     field.set(obj, fruitColor.fruitColor().toString());  
  23.                 } catch (IllegalArgumentException e) {  
  24.                     e.printStackTrace();  
  25.                 } catch (IllegalAccessException e) {  
  26.                     e.printStackTrace();  
  27.                 }  
  28.             }  
  29.         }  
  30.     }  
  31.       
  32. }  

 LAST: main方法

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public class Main {  
  2.       
  3.     public static void main(String[] args) {  
  4.         Apple apple = new Apple();  
  5.           
  6.         FruitInfoUtil.getFruitInfo(apple);  
  7.           
  8.         apple.displayName();  
  9.       
  10.     }  
  11. }  


执行结果:

水果的名字是: Apple 水果的颜色是:RED


上传下别人总结的annotation的一张图,很直观





版权声明:本文博客原创文章,博客,未经同意,不得转载。

原文地址:https://www.cnblogs.com/gcczhongduan/p/4628625.html