首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

19.枚举部类

2012-10-09 
19.枚举类型1.静态导入enum? public enum Spiciness{NOT,MILD,MEDIUM,HOT,FLAMING }? 在其他类中应用如果?

19.枚举类型

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());
? }
}

热点排行