如果某“数据集”的元素是稳定的而且个数是有限的(如东南西北、周一到周日、春夏秋冬)可以使用枚举类,个人理解枚举类是预初始化了指定实例的java类,枚举列有很多有趣的用法,伴随EnumSet(高性能Set)和EnumMap(高性能Map)的加入,枚举类变得越来越有意思,如果我们有Set集合或Map集合key有了枚举类的特征(稳定、数目限定等)可以考虑代替HashMap和HashSet加入应用场景。
普通使用方式:
enum MsgDriveType {
WS("WS") {
@Override
public void detail() {
System.out.println("I am WS ...");
}
@Override
public void show() {
System.out.println("Myself show WS ...");
}
},
OF("OF") {
@Override
public void detail() {
System.out.println("I am OF ...");
}
},
JMS("JMS") {
@Override
public void detail() {
System.out.println("I am JMS ...");
}
},
DEFAULT {
@Override
public void detail() {
System.out.println("I am DEFAULT ...");
}
};
private String info;
// 有参构造
private MsgDriveType(String info) {
setInfo(info);
}
// 无参构造
private MsgDriveType() {
setInfo("DEFAULT");
}
public void setInfo(String info) {
this.info = info;
}
public String getInfo() {
return info;
}
public abstract void detail();
public void show() {
System.out.println("No Override, so show DEFAULT ...");
}
}
public class Test {
public static void main(String[] args) {
MsgDriveType[] li = MsgDriveType.values();
for (int i = 0; i < li.length; i++) {
// li[i].setInfo(li[i].getInfo() + " @_@");
// System.out.println(li[i].getInfo());
// li[i].detail();
// li[i].show();
System.out.println(li[i].ordinal() + "\t" + li[i].name() + "\t" + li[i].toString());
}
}
}
枚举实现接口:
//枚举的接口组织形式
interface Food {
void showSelf();//接口抽象方法
//接口自己的内部类 实现了此 接口
class a implements Food {
@Override
public void showSelf() {
System.out.println("aaaaaaa");
}
}
// 接口内部的 枚举类 实现了此 接口
enum Coffee implements Food {
BLACK_COFFEE, DECAF_COFFEE, LATTE, CAPPUCCINO;//即使枚举没有实例,这里的分号也是必须的(如果后面有属性或方法的话)
@Override
public void showSelf() {
System.out.println("枚举公共实现:" + this.name());//Enum.name()
}
}
// 接口实现 枚举 实例具体实现
enum Dessert implements Food {
FRUIT {
@Override
public void showSelf() {
System.out.println("FRUIT");
}
}, CAKE {
@Override
public void showSelf() {
System.out.println("CAKE");
}
}, GELATO {
// 注释后使用默认实现
// @Override
// public void showSelf() {
// System.out.println("GELATO");
// }
};
//默认实现
@Override
public void showSelf() {
System.out.println("Default");
}
}
}
public class Test {
public static void main(String[] args) {
Food food = new Food.a();
food = Food.Coffee.BLACK_COFFEE;
food = Food.Coffee.DECAF_COFFEE;
food = Food.Coffee.LATTE;
food = Food.Coffee.CAPPUCCINO;
food = Food.Dessert.FRUIT;
food = Food.Dessert.CAKE;
food = Food.Dessert.GELATO;
food.showSelf();
}
}
枚举列有很多有趣的用法,伴随EnumSet(高性能Set)和EnumMap(高性能Map)的加入,枚举类变得越来越有意思