博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 自定义注解之源码注解(RetentionPolicy.SOURCE)
阅读量:6222 次
发布时间:2019-06-21

本文共 1730 字,大约阅读时间需要 5 分钟。

RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;

源码注解(RetentionPolicy.SOURCE)的生命周期只存在Java源文件这一阶段,是3种生命周期中最短的注解。当在Java源程序上加了一个注解,这个Java源程序要由javac去编译,javac把java源文件编译成.class文件,在编译成class时会把Java源程序上的源码注解给去掉。需要注意的是,在编译器处理期间源码注解还存在,即注解处理器Processor 也能处理源码注解,编译器处理完之后就没有该注解信息了。

示例:

package com.mazaiting.annotiontest;import android.support.annotation.IntDef;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * @author mazaiting * @date 2018/1/16 */public class SourceAnnotation {    /**状态值*/    public static final int STATUS_OPEN = 1;    public static final int STATUS_CLOSE = 2;    public static int mStatus = STATUS_OPEN;    public static int getStatus() {        return mStatus;    }    public static void setStatus(@Status int status) {        mStatus = status;    }    public static String getStatusDesc() {        if (mStatus == STATUS_OPEN) {            return "打开状态";        } else {            return "关闭状态";        }    }    @Retention(RetentionPolicy.SOURCE)    @Target(ElementType.PARAMETER)    @IntDef({STATUS_OPEN,STATUS_CLOSE})    public @interface Status {    }}

定义了一个@Status注解,并用注解@IntDef限定了取值范围,最后将@Status注解用在参数上就行了,这样在使用调用方法的使用只能使用指定的参数{STATUS_OPEN, STATUS_CLOSE},就算用数值1编译器也会提示报错。除了@IntDef注解外还用一个@StringDef注解可以使用,用来处理字符串。

使用:

@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // 报错Must be one of: SourceAnnotation.STATUS_OPEN, SourceAnnotation.STATUS_CLOSE//        SourceAnnotation.setStatus(1);        /**源码注解*/        SourceAnnotation.setStatus(SourceAnnotation.STATUS_OPEN);    }

转载地址:http://xkfna.baihongyu.com/

你可能感兴趣的文章
Go语言简明教程
查看>>
JVM Class字节码之三-使用BCEL改变类属性
查看>>
[JAVA · 初级]:9.Object类提供的常用方法
查看>>
2016年2月问答活跃达人发奖品喽,大家快来领奖!
查看>>
【Android开发】多媒体应用开发-使用SoundPool播放音频
查看>>
Node.js 之对象池
查看>>
Android 随笔—— ConstraintLayout 效率爆表的技巧
查看>>
学习点和面试点
查看>>
自己封装一个可以随意删减 没用的资源文件的工具
查看>>
每一个程序员需要了解的10个Linux命令
查看>>
JobScheduler之超时检查
查看>>
最近找工作面试那些事儿(6月)
查看>>
简单VC内存检测
查看>>
Electron任务栏图标定制分析
查看>>
记一次简书图片403(hexo中简书图片迁移到阿里云oss)
查看>>
vue 2.0 路由切换以及组件缓存源代码重点难点分析
查看>>
清凉一夏,“极客时间”陪你过暑假
查看>>
掘金首秀
查看>>
vue面试整理
查看>>
React基础(一)
查看>>