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

2023-06-08,,

它们的定义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

    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface FruitName {
    public String value() default "";
    }
    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface FruitColor {
    public enum Color {BULE, RED, GREEN}
    public Color fruitColor() default Color.GREEN;
    }

二、使用annotation的类

实例代码:

[java] view
plaincopy

    public class Apple {
    @FruitName("Apple")
    private String appleName;
    @FruitColor(fruitColor=FruitColor.Color.RED)
    private String appleColor;
    public void setAppleColor(String appleColor) {
    this.appleColor = appleColor;
    }
    public String getAppleColor() {
    return appleColor;
    }
    public void setAppleName(String appleName) {
    this.appleName = appleName;
    }
    public String getAppleName() {
    return appleName;
    }
    public void displayName(){
    System.out.println("水果的名字是: "+ appleName + " 水果的颜色是:"+ appleColor);
    }
    }

三、annotation处理方法

实例代码:

[java] view
plaincopy

    public class FruitInfoUtil {
    public static void getFruitInfo(Object obj){
    Class<?

    > clazz = obj.getClass();
    Field[] fields = clazz.getDeclaredFields();
    for(Field field : fields){
    if(field.isAnnotationPresent(FruitName.class)){
    FruitName fruitName = (FruitName)field.getAnnotation(FruitName.class);
    try {
    field.setAccessible(true);
    field.set(obj, fruitName.value());
    } catch (IllegalArgumentException e) {
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    e.printStackTrace();
    }
    }else if(field.isAnnotationPresent(FruitColor.class)){
    FruitColor fruitColor = (FruitColor)field.getAnnotation(FruitColor.class);
    try {
    field.setAccessible(true);
    field.set(obj, fruitColor.fruitColor().toString());
    } catch (IllegalArgumentException e) {
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    e.printStackTrace();
    }
    }
    }
    }
    }

LAST: main方法

[java] view
plaincopy

    public class Main {
    public static void main(String[] args) {
    Apple apple = new Apple();
    FruitInfoUtil.getFruitInfo(apple);
    apple.displayName();
    }
    }

执行结果:

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

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

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

android反射组件 (一个)java 它们的定义annotation基础知识的相关教程结束。

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

下载本文的Word格式文档,以方便收藏与打印。