枚举
当我们需要某个参数为固定几个值的时候,这时可以使用枚举类型来约束参数选项(这样就不用担心乱传参数值)
枚举的基本用法
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(6, R.string.actionbar_title_user_blog, UserBlogFragment.class),
NOTE(24, R.string.actionbar_title_note, NoteBookFragment.class),
BROWSER(26, 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 % 2 == 0 ? ITEM_TYPE.ITEM_TYPE_IMAGE.ordinal() : ITEM_TYPE.ITEM_TYPE_TEXT.ordinal();
}
...
}