Android @IntDef的使用 - 代替枚举
官方文档说明,安卓开发应避免使用Enum(枚举类),因为相比于静态常量Enum会花费两倍以上的内存。[ 参考 ]
那么如果需要使用Enum应该怎么做呢?
public class MainActivity extends Activity {
//先定义 常量
public static final int SUNDAY = 0;
public static final int MONDAY = 1;
public static final int TUESDAY = 2;
public static final int WEDNESDAY = 3;
public static final int THURSDAY = 4;
public static final int FRIDAY = 5;
public static final int SATURDAY = 6;
//用 @IntDef "包住" 常量;
// @Retention 定义策略
// 声明构造器
@IntDef({SUNDAY, MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY})
@Retention()
public @interface WeekDays {}
@WeekDays int currentDay = SUNDAY;
@Override
protected void onCreate(Bundle savedInstanceState) {
(savedInstanceState);
setContentView(.activity_main);
setCurrentDay(WEDNESDAY);
//声明变量
@WeekDays int today = getCurrentDay();
switch (today){
case SUNDAY:
break;
case MONDAY:
break;
case TUESDAY:
break;
case WEDNESDAY:
break;
case THURSDAY:
break;
case FRIDAY:
break;
case SATURDAY:
break;
default:
break;
}
}
public void setCurrentDay(@WeekDays int currentDay) {
= currentDay;
}
@WeekDays
public int getCurrentDay() {
return currentDay;
}
}
如果缺少依赖,在中增加如下依赖
compile ‘:support-annotations:22.0.0‘
String类型
string类型和int类型类似,使用@StringDef即可
@StringDef({, , , })
@Retention()
public @interface DepositStatus {
String PAID = "PAID";
String UNPAID = "UNPAID";
String FREE = "FREE";
String EXPIRE = "EXPIRE";
}
转载自/