enum不怎么常用 但作为自1.5就推出的新特性而言 还是有必要了解一下用法 ,以及对比一下一些以前用来代替enum的做法
首先,enum是干嘛用的 为何而存在?
答:他是用来存放同种类型的常量的一种类,以前我们是使用public static final来定义常量的 然后把他放在一个特定类或者接口中 例如:
public interface IConstants {
String MON = "Mon";
String TUE = "Tue";
String WED = "Wed";
String THU = "Thu";
String FRI = "Fri";
String SAT = "Sat";
String SUN = "Sun";
}
但是enum有其他功能,例如可以按成员排序,初始index值为0,支持switch ,他可以统计这种类型一共有多少个这样的常量(使用方法enum.values().length)他还可以在常量的基础上加入value将组成类似于hashmap的enumMap<Enum<? extends enum>,Object>
以下给出了enum的常用的例子
import java.util.EnumMap;
import java.util.Iterator;
import java.util.Map.Entry;
public class TestJava1 {
public static void main(String[] args) {
for (WeekDay day : WeekDay.values()) {
// :枚举重写了ToString(),说以枚举变量的值是不带前缀的
switch (day) {
case MON:
System.out.println("周一:" + day.getDay() + " index:"
+ day.ordinal() + " boolean:" + day.getBoolean());
break;
case TUE:
System.out.println("周二::" + day.getDay() + " index:"
+ day.ordinal() + " boolean:" + day.getBoolean());
break;
case FRI:
System.out.println("周五::" + day.getDay() + " index:"
+ day.ordinal() + " boolean:" + day.getBoolean());
break;
default:
break;
}
}
EnumMap<WeekDay, String> enumMap = new EnumMap<WeekDay, String>(WeekDay.class);
enumMap.put(WeekDay.WED, "周三");
enumMap.put(WeekDay.SUN, "周日");
Iterator<Entry<WeekDay, String>> iterator = enumMap.entrySet().iterator();
for (;iterator.hasNext();) {
Entry<WeekDay, String> entry = iterator.next();
System.out.println(entry.getKey().name()+"__"+entry.getValue());
}
}
public enum WeekDay {
MON(1), TUE(2), WED(3), FUR(4), FRI(5) {
// 重写,替换父的return false
@Override
public boolean getBoolean() {
return true;
}
},
STA(6), SUN(7);
private int day;
// 必须私有化构造方法 ,因为枚举类的成员都是static final的 ,不提供外部赋值
private WeekDay(int day) {
this.day = day;
}
public boolean getBoolean() {
return false;
}
public int getDay() {
return day;
}
}
}