IntDef的使用
使用Enum 会增加 DEX 文件的大小,会造成运行时更多的开销,使我们的应用需要更多的空间。
- 定义static final的常量
private static final int ADD = 0;
private static final int SUB = 1;
private static final int MUL = 2;
private static final int DIV = 3;
- 定义一个IntDef注解,包含上面的常量,两种形式
@IntDef({ADD,SUB,MUL,DIV})
@IntDef(flag = true, value = {ADD,SUB,MUL,DIV})
第二种可以用条件进行位运算
- 定义一个注解,表明当前@IntDef的保留策略,只保留源码中,编译时删除
@Retention(RetentionPolicy.SOURCE)
其他策略:
Class:编译时被保留,在class文件中存在,但JVM将会忽略
Runtime:将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用
- 自定义一个注解 表明类型
public @interface Operation{}
- 使用,在方法中使用,类型安全,替代枚举
public void operation(@Operation int opeartion) {
switch (opeartion) {
case ADD:
break;
case SUB:
break;
case DIV:
break;
case MUL:
break;
}
}
- Android 中有使用到的一个例子
public class Toast {
static final String TAG = "Toast";
static final boolean localLOGV = false;
/** @hide */
/*定义部分*/
@IntDef({LENGTH_SHORT, LENGTH_LONG})
@Retention(RetentionPolicy.SOURCE)
public @interface Duration {}
public static final int LENGTH_SHORT = 0;
public static final int LENGTH_LONG = 1;
...
/*作为类型使用时*/
/**
* Set how long to show the view for.
* @see #LENGTH_SHORT
* @see #LENGTH_LONG
*/
public void setDuration(@Duration int duration) {
mDuration = duration;
}
/*做为返回值时*/
/**
* Return the duration.
* @see #setDuration
*/
@Duration
public int getDuration() {
return mDuration;
}
}