Android中常用的注解 @Retention、@IntDef、@StringDef用法及代表的意思

本文主要是介绍Android中常用的注解 @Retention、@IntDef、@StringDef用法及代表的意思,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Android中常用的注解

在项目中经常用到注解,但是对一些注解还是一知半解
学习一下注解及代表的含义 @Retention@StringDef深刻体会到注解的好处!在此记录一下:
@Retention注解:字面意思是保留

Retention类源码:

package java.lang.annotation;public enum RetentionPolicy {CLASS,RUNTIME,SOURCE;private RetentionPolicy() {}
}

看到enum我们就知道,原来是java 5 新增特性枚举类,有人说他是数据类型也没错。因为它是一种特殊的数据类型,
之所以特殊是因为它既是一种类(class)类型却又比类类型多了些特殊的约束,但是这些约束的存在也造就了
枚举类型的简洁性、安全性以及便捷性。

好了,下面我们来看下这三个属性CLASS,RUNTIME,SOURCE;

  • CLASS : 编译器要丢弃的注释、被编译器忽略!
  • RUNTIME : 编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。
  • SOURCE : 编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。这是默认的行为。

看完源码官方解析 下面来看下项目中的实战:

Constants类的定义:

    public static final String TAG_DAY_SELECTED = "daySelected";public static final String TAG_GOOD_LIFE = "goodLife";public static final String TAG_RECOMMEND_BOOK = "recommendBook";@Retention(RetentionPolicy.SOURCE) //默认注解//这里使用@StringDef来代替Enum枚举。它会帮我检测像Enum枚举一样,在编译时期检查变量的赋值情况!@StringDef({TAG_DAY_SELECTED, TAG_GOOD_LIFE, TAG_RECOMMEND_BOOK}) //接口定义和model中的一致public @interface HomeTagType {}public static final int TYPE_TAG = 1;
在model 中使用

给你想要设置的数据类型 设置一个标记,为了区分:

	//同上面定义的一致@Constants.HomeTagTypeprivate String tag;@Constants.HomeTagTypepublic String getTag() {return tag;}

使用注解

3个类型一样的数据 只是显示不同 我没有必要弄3个 只需要弄一个 其他2个用tag做标记 用注解来区分就可以了
这样就可以完美解决 重复造轮子的问题!

 //这里是适配器调用model中的类型switch (helper.getItemViewType()) {//tag标记case Constants.TYPE_TAG:switch (item.getTag()) {//注解1case Constants.TAG_DAY_SELECTED:helper.setImageResource(R.id.iv_tag, R.drawable.home_sift);break;//注解2case Constants.TAG_GOOD_LIFE:helper.setImageResource(R.id.iv_tag, R.drawable.home_life);break;//注解3case Constants.TAG_RECOMMEND_BOOK:helper.setImageResource(R.id.iv_tag, R.drawable.booking_recommend);break;}break;case Constants.TYPE_GOODS_TITLE:...  

依赖

dependencies {implementation fileTree(include: ['*.jar'], dir: 'libs')androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {exclude group: 'com.android.support', module: 'support-annotations'//support libs...})

总结:

注解(Annotation)相当于一种标记,在程序中加入注解就等于为程序打上某种标记,没有加,则等于没有任何标记
以后,javac编译器、开发工具和其他程序可以通过反射来了解你的类及各种元素上有无何种标记,
看你的程序有什么标记,就去干相应的事,标记可以加在包、类,属性、方法,方法的参数以及局部变量上。


与君共勉

我要一步一步往上爬
在最高点乘着叶片往前飞
任风吹干流过的泪和汗
我要一步一步往上爬
等待阳光静静看着它的脸
小小的天有大大的梦想
我有属于我的天
任风吹干流过的泪和汗
总有一天我有属于我的天
这里写图片描述

这篇关于Android中常用的注解 @Retention、@IntDef、@StringDef用法及代表的意思的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/236544

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

bytes.split的用法和注意事项

当然,我很乐意详细介绍 bytes.Split 的用法和注意事项。这个函数是 Go 标准库中 bytes 包的一个重要组成部分,用于分割字节切片。 基本用法 bytes.Split 的函数签名如下: func Split(s, sep []byte) [][]byte s 是要分割的字节切片sep 是用作分隔符的字节切片返回值是一个二维字节切片,包含分割后的结果 基本使用示例: pa

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动