枚举的作用就是
定义此元素允许的常量
1.使用@IntDef限制元素的取值范围
package com.wong.ex;
import androidx.annotation.IntDef;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
public class MainActivity extends AppCompatActivity {
//先定义 常量
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;
// 定义@WeekDays注解
@IntDef({SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY})
@Retention(RetentionPolicy.SOURCE)
public @interface WeekDays {
}
// 声明变量,限制变量的取值范围
@WeekDays
int currentDay = SUNDAY;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 声明变量,限制变量的取值范围
@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;
}
setCurrentDay(SUNDAY)
}
// 添加@WeekDays注解,限制传入值的范围
public void setCurrentDay(@WeekDays int currentDay) {
this.currentDay = currentDay;
}
// 添加@WeekDays注解,限制返回值的范围
@WeekDays
public int getCurrentDay() {
return currentDay;
}
}
虽然getCurrentDay()方法使用了@WeekDays注解限制它返回的值的范围,但是从实践来看,限制的作用有时会失效,如:
@WeekDays
public int getCurrentDay() {
return 888;
}
上面的代码@WeekDays起作用了,因为888不是所期望的取值。但是也仅仅是提示而已,告诉你必须是那些上面定义的那些常量。编译依然能通过,程序照样运行。下面这种,干脆就不提示了:
@WeekDays
public int getCurrentDay() {
return currentDay+888;
}
setCurrentDay()方法也是有同样的问题。
总的来说@IntDef的限制,感觉没有那么严格。
2.使用枚举来限制元素的取值范围
public class MainActivity extends AppCompatActivity {
//先定义 常量
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;
private enum WeekDays {SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY};
WeekDays currentDay = WeekDays.SUNDAY;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//声明变量
WeekDays 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;
}
setCurrentDay(WeekDays.SUNDAY);
}
public void setCurrentDay(WeekDays currentDay) {
this.currentDay = currentDay;
}
public WeekDays getCurrentDay() {
return currentDay;
}
}