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

相关文章

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

SpringBoot UserAgentUtils获取用户浏览器的用法

《SpringBootUserAgentUtils获取用户浏览器的用法》UserAgentUtils是于处理用户代理(User-Agent)字符串的工具类,一般用于解析和处理浏览器、操作系统以及设备... 目录介绍效果图依赖封装客户端工具封装IP工具实体类获取设备信息入库介绍UserAgentUtils

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Java中的@SneakyThrows注解用法详解

《Java中的@SneakyThrows注解用法详解》:本文主要介绍Java中的@SneakyThrows注解用法的相关资料,Lombok的@SneakyThrows注解简化了Java方法中的异常... 目录前言一、@SneakyThrows 简介1.1 什么是 Lombok?二、@SneakyThrows

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Python中的getopt模块用法小结

《Python中的getopt模块用法小结》getopt.getopt()函数是Python中用于解析命令行参数的标准库函数,该函数可以从命令行中提取选项和参数,并对它们进行处理,本文详细介绍了Pyt... 目录getopt模块介绍getopt.getopt函数的介绍getopt模块的常用用法getopt模

mysql中的group by高级用法

《mysql中的groupby高级用法》MySQL中的GROUPBY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算,下面给大家介绍mysql中的groupby用法... 目录一、基本语法与核心功能二、基础用法示例1. 单列分组统计2. 多列组合分组3. 与WHERE结合使

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl