天天看点

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

继续阅读