为什么要使用枚举
优点
1、方法的参数使用枚举,这样可以限定参数的使用范围和值。
缺点
1、相比于静态变量,会占用更多的内存并且会产生更大的文件。
android建议是否使用枚举
android不建议使用枚举,详细的介绍请看下面的文章(绝对冲击你的思想)
枚举是什么
指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。
举例:一周只有7天,一年只有12个月等。
枚举的实现方式一:class 实现的枚举
1、自定义枚举类型(关键字:静态常量 + 私有构造)
package com.example.test;
/**
* 自定义枚举
*/
public class Week {
//静态的常量
public static final Week MON = new Week();
public static final Week TUE = new Week();
public static final Week WED = new Week();
//私有构造
private Week(){
}
}
复制代码
使用方法如下
Week flag = Week.MON;
if (flag == Week.MON) {
Toast.makeText(this, "星期一", Toast.LENGTH_SHORT).show();
}
复制代码
2、自定义有参数枚举(关键字:静态常量 + 私有构造 + 参数)
package com.example.test;
/**
* 自定义枚举
*/
public class Week {
private final String name;
//静态的常量
public static final Week MON = new Week("星期一");
public static final Week TUE = new Week("星期一");
public static final Week WED = new Week("星期一");
//私有构造 + 参数
private Week(String name){
this.name = name;
}
public String getName(){
return name;
}
}
复制代码
使用方式如下:
Week flag = Week.MON;
if (flag == Week.MON) {
Toast.makeText(this, flag.getName(), Toast.LENGTH_SHORT).show();
}
复制代码
3、抽象类实现枚举类型(关键字:抽象方法+ 静态常量 + 私有构造)
package com.example.test;
import android.util.Log;
/**
* 定义枚举类型
*/
public abstract class Week {
private static final String TAG = Week.class.getSimpleName();
private final String name;
//静态的常量
public static final Week MON = new Week("星期一"){
@Override
public void show() {
Log.e(TAG,"星期一");
}
};
public static final Week TUE = new Week("星期二") {
@Override
public void show() {
Log.e(TAG,"星期二");
}
};
public static final Week WED = new Week("星期三") {
@Override
public void show() {
Log.e(TAG,"星期三");
}
};
//私有构造 + 参数
private Week(String name){
this.name = name;
}
public String getName(){
return name;
}
public abstract void show();
}
复制代码
使用方式如下:
Week flag = Week.MON;
if (flag == Week.MON) {
Toast.makeText(this, flag.getName(), Toast.LENGTH_SHORT).show();
}
复制代码
枚举的实现方式二:enum实现的枚举
1、利用enum实现枚举类
package com.example.test;
/**
* 利用enum实现枚举
*/
public enum Week {
MON,TUE,WED;
}
复制代码
使用方式如下:
Week flag = Week.MON;
if (flag == Week.MON) {
Toast.makeText(this, "星期一", Toast.LENGTH_SHORT).show();
}
复制代码
2、利用enum + 构造实现枚举
package com.example.test;
/**
* 利用enum + 构造实现枚举
*/
public enum Week {
MON("星期一"),TUE("星期二"),WED("星期三");
private final String name;
Week(String name) {
this.name = name;
}
public String getName(){
return name;
}
}
复制代码
调用方法如下:
Week flag = Week.MON;
if (flag == Week.MON) {
Toast.makeText(this, flag.getName(), Toast.LENGTH_SHORT).show();
}
复制代码
3、利用enum + 私有构造 + 抽象方法实现枚举
package com.example.test;
import android.util.Log;
/**
* 利用enum + 构造实现枚举
*/
public enum Week {
MON("星期一"){
@Override
public void show() {
Log.e(TAG,"星期一");
}
},
TUE("星期二"){
@Override
public void show() {
}
},
WED("星期三"){
@Override
public void show() {
}
};
private static final String TAG = Week.class.getSimpleName();
private final String name;
Week(String name) {
this.name = name;
}
public String getName(){
return name;
}
public abstract void show();
}
复制代码
4、枚举实现接口