天天看點

枚舉(enum)的基本用法

枚舉

當我們需要某個參數為固定幾個值的時候,這時可以使用枚舉類型來限制參數選項(這樣就不用擔心亂傳參數值)

枚舉的基本用法

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();
    }
    ...
}
           

繼續閱讀