码迷,mamicode.com
首页 > 移动开发 > 详细

android反射组件 (一)java 自定义annotation基础知识

时间:2014-10-23 17:45:37      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:android   style   blog   http   color   io   os   ar   使用   

自定义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 plaincopybubuko.com,布布扣bubuko.com,布布扣
  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 plaincopybubuko.com,布布扣bubuko.com,布布扣
  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 plaincopybubuko.com,布布扣bubuko.com,布布扣
  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 plaincopybubuko.com,布布扣bubuko.com,布布扣
  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的一张图,非常直观

bubuko.com,布布扣



android反射组件 (一)java 自定义annotation基础知识

标签:android   style   blog   http   color   io   os   ar   使用   

原文地址:http://blog.csdn.net/lsong89/article/details/40399967

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!