我们平时是这样使用注解的:
private static WeekDay mCurrentDay;
enum WeekDay {
SUNDAY, MONDAY //12字节对象头+内容+8字节对齐
}
public static void setCurrentDay(WeekDay weekDay) {
mCurrentDay = weekDay;
}
大家都知道,枚举是非常消耗内存的。每个枚举实例都是一个Object对象。拥有12字节头+内容+8字节的对齐。我们可以使用@IntDef来代替:
private static final int SUNDAY = 0;
private static final int MONDAY = 1;
@IntDef({SUNDAY,MONDAY})
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.SOURCE)
@interface WekDay {
}
private static int mCurrentIntDay;
public static void setCurrentDay(@WekDay int currentDay){
mCurrentIntDay = currentDay;
}
注意,这里@IntDef后面要包住我们的定义的常量。
如果我们这个时候直接使用这样调用:
setCurrentDay(1);
这是会报错的。
此时,必须使用:
setCurrentDay(MONDAY);