Android 注解入门

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liangjingkanji/article/details/53485107

注解

注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释.

注解分类

  1. 标示注解: 成员个数为0
  2. 单值注解: 成员个数为1
  3. 完整注解: 成员个数大于1
  4. 系统注解: 系统提供的注解
  5. 元注解: 为注解所注解

系统注解


@override

被修饰的方法必须为父类方法重写, 标示为该方法是方法重写

@Deprecated

被修饰的方法的方法名出现删除线, 标示为该方法已被废弃, 该修饰有继承性, 父类拥有所有子类都将被废弃.

@SuppressWarnings(可变参数)

​ 解除编译器的警告, 提供多种参数

元注解


元注解的作用就是负责注解其他注解

@Target(可变参数)

规定注解的作用范围

@Retention(可变参数)

规定注解的生命周期时间

@Documented

注解会在生成Doc文档时保留注解

@Inherited

规定注解被子类继承, 该注解只能修饰类, 且类必须被@Retention(RetentPoicy.Runtime)修饰

依赖注入


依赖:自定义一个注解, 在运行期使用注解参数.

自定义注解

@interface 类型的代码块就是注解, 与接口和类是同一级别

注意

  1. 参数成员类型只能是基本类型, 即int, float..等
  2. 成员访问权修饰符和接口interface一样, 默认public
示例:

注解

@Target(ElementType.FIELD)
// 这里必须保证注解是生命周期是运行时, 因为反射是运行时才生效, 如果注解再运行时之前就被擦除,反射将无法获取注解的参数
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomAnnotation {
     String value(); // 和接口的成员
}

工具方法

    public static void parseAnnotation(Object obj) throws IllegalAccessException {
        System.out.println("进入");
        Class<? extends Object> objClass = obj.getClass();
        Field[] fields = objClass.getFields();
        System.out.println(fields.length);
        for (Field field : fields) {
            System.out.println("循环");
            // 判断该字段是否存在CustomAnnotation注解
            if (field.isAnnotationPresent(CustomAnnotation.class)) {
                System.out.println("运行");
                // 得到该注解对象
                CustomAnnotation customAnnotation = field.getAnnotation(CustomAnnotation.class);
                // 得到注解的成员
                String value = customAnnotation.value();
                // 传入对象设置字段
                field.set(obj, value);
            }
        }
    }

因为我只需要执行java代码即可, 所以在测试类中执行

public class ExampleUnitTest {
    @CustomAnnotation("程序吴彦祖")
    public String name ;

    @Test
    public void addition_isCorrect() throws Exception {
       ParseAnnotation.parseAnnotation(this);
        System.out.println(name);
    }
}

结果:

如果注解有多个成员方法, 即完整注解, 则在注解的时候需要规定格式方法名 = 值

    @CustomAnnotation(value = "程序吴彦祖", number = 4)
    public String name;

猜你喜欢

转载自blog.csdn.net/liangjingkanji/article/details/53485107