Android 自定义注解之源码注解(RetentionPolicy.SOURCE)

简介: RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;源码注解(RetentionPolicy.SOURCE)的生命周期只存在Java源文件这一阶段,是3种生命周期中最短的注解。

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);
    }
目录
相关文章
|
21天前
|
XML Java Android开发
Android实现自定义进度条(源码+解析)
Android实现自定义进度条(源码+解析)
50 1
|
21天前
|
Java Android开发
Android反编译查看源码
Android反编译查看源码
23 0
|
3月前
|
数据采集 小程序 数据可视化
智慧校园电子班牌管理系统源码 Java Android原生
家长通过家长小程序端随时了解孩子在校的情况,实时接收学生的出勤情况,学生到校、离校时间。随时了解学生在校的表现、学生成绩排名,及时与教师沟通,关注孩子的健康成长。
30 0
智慧校园电子班牌管理系统源码 Java Android原生
|
3月前
|
算法 Java 定位技术
分享104个益智休闲安卓游戏源码,总有一款适合你
分享104个益智休闲安卓游戏源码,总有一款适合你
149 1
|
1天前
|
JSON 编译器 开发工具
VS Code阅读Android源码
VS Code阅读Android源码
6 1
|
25天前
|
Android开发
Android 开发 pickerview 自定义选择器
Android 开发 pickerview 自定义选择器
12 0
|
1月前
|
定位技术 API 数据库
基于Android的在线移动电子导航系统的研究与实现(论文+源码)_kaic
基于Android的在线移动电子导航系统的研究与实现(论文+源码)_kaic
|
1月前
|
搜索推荐 测试技术 定位技术
基于Android的自助导游系统的设计与实现(论文+源码)_kaic
基于Android的自助导游系统的设计与实现(论文+源码)_kaic
|
1月前
|
Java 关系型数据库 应用服务中间件
基于Android的人事管理系统设计与实现(论文+源码)_kaic
基于Android的人事管理系统设计与实现(论文+源码)_kaic
|
1月前
|
设计模式 测试技术 数据库
基于Android的食堂点餐APP的设计与实现(论文+源码)_kaic
基于Android的食堂点餐APP的设计与实现(论文+源码)_kaic