1.静态导入enum
public enum Spiciness{NOT,MILD,MEDIUM,HOT,FLAMING }
在其他类中应用如果
import static package.Spiciness.*;
那么在直接用NOT就行,不用enum类型修饰enum的实例。
如果enum在默认包里,或者在同一文件里,则无法使用这一特性。
2.enum中添加方法
enum除了不能继承自一个enum,基本可以看成一个常规类。可以有方法,甚至有main方法。
所有的枚举值都是public,static,final
3.switch和enum结合
如: enum Signal{GREEN,YELLOW,RED}
Signal color=Signal.RED;
switch(color){
case Signal.RED: color = Signal.GREEN;
break;
}
4.enum的values()和oridinal
所有enum都继承自ENUM类,但是ENUM类中没有values()方法,它是编译器加上的static方法。
oridinal返回枚举值在枚举类中的顺序。
5.实现,而非继承
enum都继承自java.lang.Enum类,所以不能再多重继承,只能实现一个或多个接口。
6.EnumSet
EnumSet必须和一个enum一起工作
例子:
package enumerated;
public enum AlarmPoints {
STAIR1, STAIR2, LOBBY, OFFICE1, OFFICE2, OFFICE3,
OFFICE4, BATHROOM, UTILITY, KITCHEN
}
package enumerated;
import java.util.*;
import static enumerated.AlarmPoints.*;
import static net.mindview.util.Print.*;
public class EnumSets {
public static void main(String[] args) {
EnumSet<AlarmPoints> points =
EnumSet.noneOf(AlarmPoints.class); // Empty set
points.add(BATHROOM); //1.加单个值
print(points);
points.addAll(EnumSet.of(STAIR1, STAIR2, KITCHEN)); //2.加多个值
print(points);
points = EnumSet.allOf(AlarmPoints.class); //3.加所有值
points.removeAll(EnumSet.of(STAIR1, STAIR2, KITCHEN)); //3.删除多个值
print(points);
points.removeAll(EnumSet.range(OFFICE1, OFFICE4)); //4.删除这个范围内的值
print(points);
points = EnumSet.complementOf(points); //5.去反
print(points);
}
} /* Output:
1.[BATHROOM]
2.[STAIR1, STAIR2, BATHROOM, KITCHEN]
3.[LOBBY, OFFICE1, OFFICE2, OFFICE3, OFFICE4, BATHROOM, UTILITY]
4.[LOBBY, BATHROOM, UTILITY]
5.[STAIR1, STAIR2, OFFICE1, OFFICE2, OFFICE3, OFFICE4, KITCHEN]
7.EnumMap
package enumerated;
import java.util.*;
import static enumerated.AlarmPoints.*;
import static net.mindview.util.Print.*;
interface Command { void action(); }
public class EnumMaps {
public static void main(String[] args) {
EnumMap<AlarmPoints,Command> em =
new EnumMap<AlarmPoints,Command>(AlarmPoints.class);
em.put(KITCHEN, new Command() {
public void action() { print("Kitchen fire!"); } //加入键值对,值为匿名对象
});
em.put(BATHROOM, new Command() {
public void action() { print("Bathroom alert!"); }
});
for(Map.Entry<AlarmPoints,Command> e : em.entrySet()) {
printnb(e.getKey() + ": ");
e.getValue().action(); //调用值对应的对象的方法
}
try { // If there's no value for a particular key:
em.get(UTILITY).action();
} catch(Exception e) {
print(e);
}
}
} /* Output:
BATHROOM: Bathroom alert!
KITCHEN: Kitchen fire!
java.lang.NullPointerException
*///:~
8.常量相关的方法
public enum ConstantSpecificMethod {
DATE_TIME {
String getInfo() { //定义各自不同的行为
return
DateFormat.getDateInstance().format(new Date());
}
},
CLASSPATH {
String getInfo() {
return System.getenv("CLASSPATH");
}
},
VERSION {
String getInfo() {
return System.getProperty("java.version");
}
};
abstract String getInfo();//为每个enum实例定义的抽象方法,也可以定义多个,然后每个实例实现。
public static void main(String[] args) {
for(ConstantSpecificMethod csm : values())
System.out.println(csm.getInfo());
}
}