教你使用Android自带注解@IntDef代替Enum (枚举)
来源:互联网 发布:苏州网络电视台 编辑:程序博客网 时间:2024/06/14 02:49
当我们的业务需求变的多起来的时候,我们这个时候可能都需要对每个需求加上点击事件,这个时候我们经常使用枚举类来实现这种变化,举个例子常见的业务场景出现在MineFragment界面,可能出现item列表界面,当我们为它们设置item点击事件的时候,我们把所有数据封装进去bean集合里面,然后添加一个枚举类型来标识,相对于用position来标识这样的做法适应于减少业务需求不断改变带来的修改代码的繁琐。
public enum MineItemType { MINE_ACCOUNT, // 账户 MIME_QRCODE, // 二维码 MINE_TRANSACTION_RECORDS, // 交易记录 MINE_TRANSFER, // 转账 MINE_RECHARGE, // 话费充值}
然后我们在bean中可以这样写
public class MineItemBean { private MineItemType itemType;//菜单类型 private int iconID; private String itemName; private String itemValue; private boolean isTitle; public MineItemBean (MineItemType itemType, int iconID, String itemName,boolean isTitle) { this.itemType = itemType; this.iconID = iconID; this.itemName = itemName; this.isTitle = isTitle; } public MineItemType getItemType() { return itemType; } public void setItemType(MineItemType itemType) { this.itemType = itemType; } public int getIconID() { return iconID; } public void setIconID(int iconID) { this.iconID = iconID; } public String getItemName() { return itemName; } public void setItemName(String itemName) { this.itemName = itemName; } public String getItemValue() { return itemValue; } public void setItemValue(String itemValue) { this.itemValue = itemValue; } public boolean isTitle() { return isTitle; } public void setTitle(boolean title) { isTitle = title; }}
这样写看上去很简单很方便, 但是官方文档说明,安卓开发应避免使用Enum(枚举类),因为相比于静态常量Enum会花费两倍以上的内存。于是我们想有没有一种方式能代替枚举的这种写法呢,当然有,谷歌为我们提供了 @IntDef
public class MineItemType { private byte tab; public static final byte MINE_ACCOUNT=0; public static final byte MIME_QRCODE=1; public static final byte MINE_TRANSACTION_RECORDS=2; public static final byte MINE_TRANSFER=3; public static final byte MINE_RECHARGE=4; //用 @IntDef "包住" 常量; // @Retention 定义策略 // 声明构造器 @IntDef({MINE_ACCOUNT, MIME_QRCODE, MINE_TRANSACTION_RECORDS,MINE_TRANSFER,MINE_RECHARGE}) @Retention(RetentionPolicy.SOURCE) public @interface Tab{} @Tab public byte getTab() { return tab; } public void setTab(@Tab byte tab) { this.tab = tab; }}
然后我们在MineItemBean 可以改写成这样
public class MineItemBean { private byte type; //类型 private int iconID; private String itemName; private String itemValue; private boolean isTitle; public MineItemBean (@MineItemType.Tab byte type, int iconID, String itemName,boolean isTitle) { this.type= type; this.iconID = iconID; this.itemName = itemName; this.isTitle = isTitle; } public byte getType() { return type; } public void setType(byte type) { this.type = type; } public int getIconID() { return iconID; } public void setIconID(int iconID) { this.iconID = iconID; } public String getItemName() { return itemName; } public void setItemName(String itemName) { this.itemName = itemName; } public String getItemValue() { return itemValue; } public void setItemValue(String itemValue) { this.itemValue = itemValue; } public boolean isTitle() { return isTitle; } public void setTitle(boolean title) { isTitle = title; }}
基本就是这样实现的,最后我们使用的时候就这样的写
switch (bean.getType()){ case MineItemType.MINE_ACCOUNT: break; case MineItemType.MIME_QRCODE: break; case MineItemType.MINE_TRANSACTION_RECORDS: break; case MineItemType.MINE_TRANSFER: break; case MineItemType.MINE_RECHARGE: break; }
0 0
- 教你使用Android自带注解@IntDef代替Enum (枚举)
- Android:使用@IntDef代替Enum
- Android @IntDef的使用 - 代替枚举
- Java Enum枚举替代方案--Android IntDef/StringDef Annotation注解
- 使用注解@IntDef替代枚举
- (4.6.18)android开发Enum (枚举)的完美替代 —— @IntDef的使用
- android开发Enum (枚举)的完美替代 —— @IntDef的使用
- Android 开发 之 Enum (枚举) —— @IntDef的使用
- android开发Enum (枚举)的完美替代 —— @IntDef的使用
- Android 开发 之 Enum (枚举) —— @IntDef的使用
- Android 开发 之 Enum (枚举) —— @IntDef的使用
- android开发Enum (枚举)的更轻量级的替代方案 —— @IntDef的使用
- 使用注解@IntDef替代枚举学习
- 使用注解代替enum
- android开发Enum (枚举)的更轻量级的替代方案 —— @IntDef的使用 原创 2017年11月28日 09:17:58 77 最近在翻看Android源码的时候,无意中看到这么一个注解,
- Androi--开发 之 Enum (枚举) —— @IntDef的使用
- android中 IntDef注解的使用
- @IntDef的使用(替代枚举)
- eclipse 导入appcompat-v7 包
- 一步一步DIY zepto库,研究zepto源码8 -- touch模块
- Airplay开发
- 同步监视器锁定的释放问题
- avalon的控制器作用域
- 教你使用Android自带注解@IntDef代替Enum (枚举)
- 判断2个由小写字母组成的字符串是否有共同的元素
- java -- jar包信息查看
- 关于windows下Nutch 2.2+MySQL实现网站内容的抓取的搭建步骤
- map和get的使用
- 【leetcode】Happy Number
- 清理浮动相关
- argmax或者argmin中正下方参数的编写
- 什么样的DevOps技能是团队需要的?