Android中使用注解来代替枚举类的方式
来源:互联网 发布:yum配置文件 编辑:程序博客网 时间:2024/05/19 12:29
记得我刚开始写代码的时候,在一些场景中还不会利用枚举类enum ,会经常用数字太代替,比如:
switch (type) { case 1: //1代表。。。。。 fun1(); break; case 2: //2代表。。。。。 fun2(); break; case 3: //3代表。。。。。 fun3(); break; default: break; }
虽然也加了注释,但是这样看起来还是赶紧很 low,因为在代码里突然出现这种“神奇数字“,一看就是新手。
有同学说,那我在这个类里加几个**public static final** 的常量来区分type ,不就好管理,好辨认了吗,在有些情况下,比如这几个常量之间没有什么关系,也不用于辨别一个类型,那这样做确实没什么问题,但是遇到类似上面的情况,数字1 ,2 ,3都是用于辨别type时,有同学会这样来用:
public static final String HOTEL = 1;public static final String FLIGHT = 2;public static final String TRAIN = 3;
如果就只有简单的几个类型,用在类里定义**public static final** 的形式就还是没什么问题,但是如果比较多的时候,就显得有点low了,然后一些同学会说,那就使用enum类来统一管理呗,
public enum EnumTest { HOTEL, FLIGHT, TRAIN, ... }
在java开发中,虽然推荐使用枚举类替代一些int常量,但是在android中,官方还是不建议使用枚举类的:
Enums often require more than twice as much memory as static constants. You should strictly avoid using enums on Android.
由官网的描述可知,枚举类还是很耗费内存的,所以更加优雅的方式应该是使用注解的形式,
如下所示:
1 先定义一个类 ,里面定义好各种枚举类型,这里我用是在一个类里定义的一个内部类
static class FilterTypeManager { static final int Type_Star = 1; static final int Type_Price = 2; static final int Type_Facility = 3; static final int Type_PayType = 4; static final int Type_POI = 5; }
2 然后使用注解的形式,如下代码所示:
@IntDef({FilterTypeManager.Type_Star, FilterTypeManager.Type_Price, FilterTypeManager.Type_Facility, FilterTypeManager.Type_POI, FilterTypeManager.Type_Brand, FilterTypeManager.Type_Promo, FilterTypeManager.Type_FreeCancel, FilterTypeManager.Type_Bookable, FilterTypeManager.Type_Distance}) @Retention(RetentionPolicy.SOURCE) @interface FilterType { }
前提是你已经倒入了注解的包:
compile ‘com.android.support:support-annotations:24.0.0’
3 使用的时候,就用下面的形式:
switch (type) { case FilterType.Type_Star: do something; break; case FilterType.Type_Price: do something; break; . . . }
由于我们上面注解声明的是RetentionPolicy.SOURCE,所以好处是,编译器代码检查工具能识别出来错误引用的地方,
我们可以在变量声明、函数返回值声明、函数参数声明前加上该注解,那么就可以限定相应的值,只能是我们注解中定义的枚举值,这样就可以避免一些错误。
@FilterType private int type; @FilterType public int getType(){ return type; } public void setType(@FilterType int type){ this.type = type; }
其实android中关于View的setVisibility(),其中View,VISIBLE, View.GONE ,View.INVISIBILE 也是类似这样处理的。
ok ,如果你的android项目中还是在大量使用enum枚举类的话,还是赶紧改成注解的形式吧。
1 0
- Android中使用注解来代替枚举类的方式
- android用注解代替枚举
- Android @IntDef的使用 - 代替枚举
- spring3中使用注解的方式来进行任务调度
- 使用@Configuration注解来代替Spring的bean配置
- Android中使用注解替代枚举
- 注解代替枚举
- 教你使用Android自带注解@IntDef代替Enum (枚举)
- 【java简单的注解使用方式】用注解代替设置属性方法
- Android中通过注解代替findViewById方法
- Android中通过注解代替findViewById方法
- Android中通过注解代替findViewById方法
- Android中通过注解代替findViewById方法
- Spring中使用注解代替xml配置文件
- spring 3 中使用注解的方式来进行任务调度。
- spring 3 中使用注解的方式来进行任务调度。
- spring 3 中使用注解的方式来进行任务调度。
- spring 3 中使用注解的方式来进行任务调度
- 图片上传form表单需要设置的属性
- hog特征原理描述
- LeetCode107. Binary Tree Level Order Traversal II
- django ajax
- Linux下 文件描述符(fd)与 文件指针(FILE*)
- Android中使用注解来代替枚举类的方式
- Spark源码学习笔记6-RpcEnv(Rpc实现层)
- php实现归并排序
- C++ 使用单向链表实现Stack
- 计算机视觉︱图像取证技术
- Context都没弄明白,还怎么做Android开发?
- kNN算法及实例(一)
- 笔记:Generic Solving of Text-based CAPTCHAs
- 《程序员修炼之道》笔记(八)