• 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的一张图,很直观





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

  • 相关阅读:
    FAST for SharePoint如何重置Index
    SharePoint 2007有性能问题? 先试试这篇.
    "Cannot generate SSPI context"
    记录一个用过的SQL脚本(select * into)
    IISRESET为什么有时候要带个noforce参数?
    SharePoint跟权限有关的Object Model Class
    DotNET也谈组合强命名破解FlyGrid 1.5.0.31963 for VS2003
    应同学之邀,破解一个软件,学习逆向工程,文章如下
    win2003下建立*.*到asp.net的映射(安装CNBlogsDotText用)
    MS.Net CLR 扩展PE结构分析
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4628625.html
Copyright © 2020-2023  润新知