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

相关文章

Spring Boot整合Redis注解实现增删改查功能(Redis注解使用)

《SpringBoot整合Redis注解实现增删改查功能(Redis注解使用)》文章介绍了如何使用SpringBoot整合Redis注解实现增删改查功能,包括配置、实体类、Repository、Se... 目录配置Redis连接定义实体类创建Repository接口增删改查操作示例插入数据查询数据删除数据更

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

JDK21对虚拟线程的几种用法实践指南

《JDK21对虚拟线程的几种用法实践指南》虚拟线程是Java中的一种轻量级线程,由JVM管理,特别适合于I/O密集型任务,:本文主要介绍JDK21对虚拟线程的几种用法,文中通过代码介绍的非常详细,... 目录一、参考官方文档二、什么是虚拟线程三、几种用法1、Thread.ofVirtual().start(

Java8 Collectors.toMap() 的两种用法

《Java8Collectors.toMap()的两种用法》Collectors.toMap():JDK8中提供,用于将Stream流转换为Map,本文给大家介绍Java8Collector... 目录一、简单介绍用法1:根据某一属性,对对象的实例或属性做映射用法2:根据某一属性,对对象集合进行去重二、Du

Python打包成exe常用的四种方法小结

《Python打包成exe常用的四种方法小结》本文主要介绍了Python打包成exe常用的四种方法,包括PyInstaller、cx_Freeze、Py2exe、Nuitka,文中通过示例代码介绍的非... 目录一.PyInstaller11.安装:2. PyInstaller常用参数下面是pyinstal

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

Python 常用数据类型详解之字符串、列表、字典操作方法

《Python常用数据类型详解之字符串、列表、字典操作方法》在Python中,字符串、列表和字典是最常用的数据类型,它们在数据处理、程序设计和算法实现中扮演着重要角色,接下来通过本文给大家介绍这三种... 目录一、字符串(String)(一)创建字符串(二)字符串操作1. 字符串连接2. 字符串重复3. 字

Python中的sort方法、sorted函数与lambda表达式及用法详解

《Python中的sort方法、sorted函数与lambda表达式及用法详解》文章对比了Python中list.sort()与sorted()函数的区别,指出sort()原地排序返回None,sor... 目录1. sort()方法1.1 sort()方法1.2 基本语法和参数A. reverse参数B.

Spring的基础事务注解@Transactional作用解读

《Spring的基础事务注解@Transactional作用解读》文章介绍了Spring框架中的事务管理,核心注解@Transactional用于声明事务,支持传播机制、隔离级别等配置,结合@Tran... 目录一、事务管理基础1.1 Spring事务的核心注解1.2 注解属性详解1.3 实现原理二、事务事