Android 注解解说

本文详细介绍了Android注解的概念,其在开发中的应用,包括注解的生命周期、修饰范围,以及如何通过反射动态获取注解信息。通过案例展示了注解在实际开发中的使用,如用于简化findViewById操作和定义自定义方法注解。
摘要由CSDN通过智能技术生成

Android 注解 Annotation

注解:代码中的一个特殊标记,这些标记在代码编译、类加载、运行时被截取到,并执行相应的处理。注解哟永远不会主动运行,只能是被动执行。

应用场景:在开发中,可以在源码中嵌入一些补充的信息,代码分析工具、开发工具和部署工具可以通过这些补充的信息进行验证、处理或者进行部署。
一个标准的注解格式:用@interface表明是一个注解, 它跟interface没有任何关系。注解它只有成员变量没有方法,方法名其实是变量名如value,返回值代表变量类型如String。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface BindAddress {
   
    String value() default "127.0.0.0";
}

注解变量有设置默认值时,在变量注解时就不需要设置值

 @BindAddress //可以不需要设置值
 private String address;

@Retention :定义注解的生命周期。有以下几个值

  1. RetentionPoicy.SOURCE: 注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃。(适用于检查操作,如我们看到的@Override)
  2. RetentionPoicy.CLASS:注解会被保留到class文件,它有个默认声明周期,在被java虚拟机加载class文件时被遗弃。(适用于添加一些预处理操纵,如ButterKnife)
  3. RetentionPoicy.RUNTIM:注解不仅被保留到源文件,被java虚拟机加载class文件时,仍然保留。(适用在运行去动态获取注解信息,长搭配反射配合使用)

@Target: 定义了注解所修饰的对象范围, 它也有个成员变量

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
   
    /**
     * Returns an array of the kinds of elements an annotation type
     * can be applied to.
     * @return an array of the kinds of elements an annotation type
     * can be applied to
     */
    ElementType[] value();
}

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

除了@Retention @Target两个,还有@Inherrited:是否允许子类继承父类的注解,默认为false。@Documented是否会保存在JavaDoc文档中。

案例1⃣️:

写一个根据反射获取view Id
开发工具创建一个注解:
在这里插入图片描述
给注解添加添加你需要的生命周期和修饰范围。添加一个方法并给予一个默认返回值-1

    @Target({
   ElementType.FIELD})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface BindView {
   
        int value() default  -1;
    }

因为注解永远时被动执行,需要通过反射获取注解,再把注解中的值传给findViewById,通过反射把view赋值给代码中TextView对象mText

private void getView() {
   
        //获得成员变量
        Field[] fields = getClass().getDeclaredFields
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值