枚舉的作用就是
定義此元素允許的常量
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;
}
}