使用注解@IntDef替代枚举学习
来源:互联网 发布:linux 反汇编工具 编辑:程序博客网 时间:2024/06/05 16:27
使用注解@IntDef替代枚举的实践
最近公司要求开一个新的项目,于是整理了原有项目的依赖库,升级最新的依赖,替换后的一个类库 BaseRecyclerViewAdapterHelper
在上拉加载更多的时候总是会多次调用 onLoadMoreRequested()
方法,处于好奇阅读了源码
adapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() { @Override public void onLoadMoreRequested() { adapter.setEnableLoadMore(false); rvLoadmore.postDelayed(new Runnable() { @Override public void run() { /*if (mCurrentCounter >= TOTAL_COUNTER) { //数据全部加载完毕 mQuickAdapter.loadMoreEnd(); } else { if (isErr) {*/ //成功获取更多数据 LogUtil.e("加载更多中...."); handler.sendEmptyMessageDelayed(200, 800); } }, 50); } });
- 至于上上面的代码调用多次的原因,本帖不做讨论。
不过这一次的代码阅读让我受益匪浅,发现了一个好东西
@IntDef
赶紧贴一下代码。//Animation /** * Use with {@link #openLoadAnimation} */ public static final int ALPHAIN = 0x00000001; /** * Use with {@link #openLoadAnimation} */ public static final int SCALEIN = 0x00000002; /** * Use with {@link #openLoadAnimation} */ public static final int SLIDEIN_BOTTOM = 0x00000003; /** * Use with {@link #openLoadAnimation} */ public static final int SLIDEIN_LEFT = 0x00000004; @IntDef({ALPHAIN, SCALEIN, SLIDEIN_BOTTOM, SLIDEIN_LEFT, SLIDEIN_RIGHT})、 @Retention(RetentionPolicy.SOURCE) public @interface AnimationType { }/** * Set the view animation type. * * @param animationType One of {@link #ALPHAIN}, {@link #SCALEIN}, {@link #SLIDEIN_BOTTOM}, * {@link #SLIDEIN_LEFT}, {@link #SLIDEIN_RIGHT}. */public void openLoadAnimation(@AnimationType int animationType) { this.mOpenAnimationEnable = true; mCustomAnimation = null; switch (animationType) { case ALPHAIN: mSelectAnimation = new AlphaInAnimation(); break; case SCALEIN: mSelectAnimation = new ScaleInAnimation(); break; case SLIDEIN_BOTTOM: mSelectAnimation = new SlideInBottomAnimation(); break; case SLIDEIN_LEFT: mSelectAnimation = new SlideInLeftAnimation(); break; case SLIDEIN_RIGHT: mSelectAnimation = new SlideInRightAnimation(); break; default: break; }}
开始研究(下面就深扒一下具体的使用)
讲真的 @IntDef
第一次见,赶紧的百度,忽然间发现真是个不错的东西。
百度 Android 官方文档找到下面的说明
Be careful with code abstractions
Developers often use abstractions simply as a good programming practice, because
abstractions can improve code flexibility and maintenance. However, abstractions
come at a significant cost: generally they require a fair amount more code that
needs to be executed, requiring more time and more RAM for that code to be mapped
into memory. So if your abstractions aren’t supplying a significant benefit, you
should avoid them.For example, enums often require more than twice as much memory as static constants. You should strictly avoid using enums on Android.
大体的意思就是: 我们在写代码的时候要注意类型的使用,以便于提高代码的扩展性和维护性,但是原型的使用一般会付出更多的内存的代价,所以如果没有特别大的好处,要尽量避免使用。对于枚举来说占用的内存往往是使用静态常量的两倍,因而我们要尽量避免在Android中使用枚举 。
参 http://developer.android.com/training/articles/memory.html#Overhead
- 可以看出Android 官方还是比较推荐使用 @IntDef 来代替枚举的使用的
下面咱们就学习一下怎么使用吧!
1.首先,添加android注解依赖:
compile 'com.android.support:support-annotations:25.1.0'
2.使用
public class StatusDialog extends Dialog{ //常量定义 public static final int STATE_NONE = -1; public static final int STATE_LOADING = 0; public static final int STATE_SUCCESS = 1; public static final int STATE_ERROR = 2; public static final int STATE_EMPTY = 3; //限定state的取值必须是构造器常量中的一个 private @State int state; //在声明函数的同时限定函数参数的取值,将其写在需要限定的参数前 public void setState(@State int state){ this.state = state; } @State public int getState() { return this.state; } //用 @IntDef "包住" 常量; // @Retention 定义策略 // 声明构造器 @IntDef({STATE_EMPTY, STATE_ERROR, STATE_LOADING, STATE_NONE, STATE_SUCCESS}) @Retention(RetentionPolicy.SOURCE) public @interface State { } }
好了到这里我们就可以放心的使用了
到这里我们研究一下 Retention声明的构造器的保留级别 参考 http://blog.csdn.net/u011315960/article/details/64918467
- 1、SOURCE:在原文件中有效,被编译器丢弃。
- 2、CLASS:在class文件有效,可能会被虚拟机忽略。
- 3、RUNTIME:在运行时有效。
- 使用注解@IntDef替代枚举学习
- 使用注解@IntDef替代枚举
- @IntDef的使用(替代枚举)
- Java Enum枚举替代方案--Android IntDef/StringDef Annotation注解
- android使用注解替代枚举
- android开发Enum (枚举)的完美替代 —— @IntDef的使用
- (4.6.18)android开发Enum (枚举)的完美替代 —— @IntDef的使用
- android开发Enum (枚举)的完美替代 —— @IntDef的使用
- android开发Enum (枚举)的更轻量级的替代方案 —— @IntDef的使用
- Android中使用注解替代枚举
- 教你使用Android自带注解@IntDef代替Enum (枚举)
- android开发Enum (枚举)的更轻量级的替代方案 —— @IntDef的使用 原创 2017年11月28日 09:17:58 77 最近在翻看Android源码的时候,无意中看到这么一个注解,
- Android @IntDef的使用 - 代替枚举
- android中 IntDef注解的使用
- @IntDef 替代 Enum
- Android开发中用于替代Enum的@IntDef的使用
- 使用注解@StringDef替代枚举-以切换环境为例
- 使用注解@StringDef替代枚举-以切换环境为例
- 安装cuDNN-8.0
- 文章标题
- 深入理解 CSS 中的行高与基线及line-height的用法详解
- 17.12.8 学习C语言两个月后的体会
- python 学习之路(字符串的常用操作)
- 使用注解@IntDef替代枚举学习
- java垃圾回收器介绍
- 白话解析:一致性哈希算法
- Linux tmpfs是什么
- 前端Linux命令touch小结
- 注册局设置暂停解析(serverHold)
- Spring中bean的配置与使用
- 解决Unknown CMake command "QT5_WRAP_UI"类似错误
- 问题 F: C实验题——求绝对值最大值(JSU-ZJJ)