title: 注解代替枚举案例 20180312
参考:
@IntDef的使用(替代枚举)
使用情形:比如 对 acitivity、 view、 fragment 中错误状态、重试状态、无网络状态等的处理 可以考虑该方式
前提:需依赖 annotations 库,如果有 'com.android.support:appcompat ..' 则不需要单独依赖(其已包含 annotations 库)
添加android注解依赖:
[java] view plain copy
compile 'com.android.support:support-annotations:25.1.0'
//一种使用方式:
public class WeeksDays {
@WeekDays int currentDay = SUNDAY;/*默认为 周日*/
//先定义 常量
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(RetentionPolicy.SOURCE)
public @interface WeekDays{
}
public void setCurrentDay(@WeekDays int currentDay) {
this.currentDay = currentDay;
}
@WeekDays
public int getCurrentDay() {
return currentDay;
}
}
//activity 中使用
public class Main2Activity extends AppCompatActivity {
static final String TAG = "Main2Activity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
WeeksDays weeksDays = new WeeksDays();
weeksDays.setCurrentDay(SATURDAY);
@WeeksDays.WeekDays int today = weeksDays.getCurrentDay();
switch (today) {
case SUNDAY:
Log.d(TAG,"SUNDAY");
break;
case MONDAY:
Log.d(TAG,"MONDAY");
break;
case TUESDAY:
Log.d(TAG,"TUESDAY");
break;
case WEDNESDAY:
Log.d(TAG,"WEDNESDAY");
break;
case THURSDAY:
Log.d(TAG,"THURSDAY");
break;
case FRIDAY:
Log.d(TAG,"FRIDAY");
break;
case SATURDAY:
Log.d(TAG,"SATURDAY");
break;
default:
break;
}
}
}
网友评论