枚舉
當我們需要某個參數為固定幾個值的時候,這時可以使用枚舉類型來限制參數選項(這樣就不用擔心亂傳參數值)
枚舉的基本用法
public enum MessageStatus {
NORMAL, SENDING, ERROR
}
NORMAL、SENDING、ERROR 都表示一個MessageStatus枚舉對象
用法:
private void handleInfo(MessageStatus status){
if (status== MessageStatus.NORMAL){
...
}
}
handleInfo(MessageStatus.SENDING);
枚舉封裝資料
枚舉可以像對象一樣,有構造函數,封裝資料
public enum SimpleBackPage {
USER_BLOG(, R.string.actionbar_title_user_blog, UserBlogFragment.class),
NOTE(, R.string.actionbar_title_note, NoteBookFragment.class),
BROWSER(, R.string.app_name, BrowserFragment.class),
private int title;
private Class<?> clz;
private int value;
private SimpleBackPage(int value, int title, Class<?> clz) {
this.value = value;
this.title = title;
this.clz = clz;
}
public int getTitle() {
return title;
}
public void setTitle(int title) {
this.title = title;
}
public Class<?> getClz() {
return clz;
}
public void setClz(Class<?> clz) {
this.clz = clz;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
使用:
showSimpleBack(context, SimpleBackPage.USER_BLOG);
public static void showSimpleBack(Context context, SimpleBackPage page,) {
Intent intent = new Intent(context, SimpleBackActivity.class);
intent.putExtra(SimpleBackActivity.BUNDLE_KEY_PAGE, page.getValue());
context.startActivity(intent);
}
枚舉相等判斷
可以用 == 判斷
private void handleInfo(MessageStatus status){
if (status== MessageStatus.NORMAL){
...
}
}
equals()方法判斷
可以使用枚舉對象的equals()方法比較大小
private void handleInfo(MessageStatus status){
if (MessageStatus.NORMAL.equals(status)){
...
}
}
可以用switch來判斷enum
public enum MessageStatus {
NORMAL, SENDING, ERROR
}
private void handleInfo(MessageStatus status){
switch (status){
//在使用switch判斷枚舉時,case後面的enum項不要加上MessageStatus
// case MessageStatus.NORMAL: //報錯
// break ;
case NORMAL:
break ;
case SENDING:
break ;
case ERROR:
break ;
}
其它用法
枚舉的int類型值
有時候我們需要使用枚舉來限制參數選項,但是實際需要的資料卻是一個int類型值
調用枚舉的ordinal() 可擷取枚舉的int類型值
public class MultipleItemAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
public static enum ITEM_TYPE {
ITEM_TYPE_IMAGE,
ITEM_TYPE_TEXT
}
@Override
public int getItemViewType(int position) {
return position % == ? ITEM_TYPE.ITEM_TYPE_IMAGE.ordinal() : ITEM_TYPE.ITEM_TYPE_TEXT.ordinal();
}
...
}