`

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

分享到:
评论

相关推荐

    typescript快速入门(79页PDF文档)

    10. 枚举 11. 类型推断 12. 类型兼容性 13. 高级类型 14. Symbols 15. 迭代器和生成器 16. 模块 17. 命名空间 18. 命名空间和模块的区别 19. 模块解析 20. 声明合并 21. 类型声明 22. JSX 23. 装饰器 24. Mixins 25....

    C#考试简答题总结 (1).docx

    枚举型与结构型的区别 3. 数据类型转换 4. break与continue 5. 访问修饰符 6. 类与对象 7. 数据抽象与过程抽象 8. 属性访问器 (什么是属性访问器?) ppt19. 封装与信息隐藏 10. 装箱与拆箱 (什么是装箱和拆箱?请...

    自编自用的c++语法快速参考

    3.枚举类型: 2 4.其他类型: 2 5.类型定义: 2 6.运算符: 3 7.运算符优先级: 3 8.运算符类型自动转换: 3 9.流程控制语句: 3 10.#include语句: 4 11.函数的传址方式: 4 12.默认的形参: 4 13.作用域...

    微软 C#语言参考 CHM格式

    4.1.8 枚举类型... 72 4.2 引用类型... 72 4.2.1 类类型... 73 4.2.2 对象类型... 73 4.2.3 字符串类型... 73 4.2.4 接口类型... 74 4.2.5 数组类型... 74 4.2.6 代表类型... 74 4.3 包装和解包... 74 4.3.1 包装...

    C#考试简答题总结 (2).docx

    3.枚举型与结构型的区别 3. 数据类型转换 4. break与continue 5. 访问修饰符 6. 类与对象 7. 数据抽象与过程抽象 9.属性访问器 10. 封装与信息隐藏 5 11.装箱与拆箱 11. 继承与多态 12. 按值传参与按引用...

    c#3.0语言规范高清PDF

    19 1.6.7 其他函数成员 .................................................................................................................................... 20 1.6.7.1 构造函数 ...........................

    NiagaraAX开发者向导-docDeveloperPDF

    建立枚举类型(Buildiing Enums) .............. 23 概览..... 23 示例..... 23 建立 Complex 对象(Building Complexes) . 25 BStructs 与 BComponents ........................ 25 建立 BComplex 子类对象 .......

    Swift4.0源代码最新201802

    元类型.playground 25.控件命名.playground 26.对象判等.playground 27.探究Self的用途.playground 28.类簇.playground 29.动态调用对象(实例).playground 2数据类型.playground 30.文本输出.playground 31.黑魔法...

    ETSI ES 201 873-1 V2.2.1(中文版)

    5 基本语言元素........................................................................................................................................19 5.0 概述.......................................

    鹏哥特色教程之C#入门到精通 基础篇 2/2

    19.再说索引 20.构造函数和析构函数 21.静态类、静态方法、静态变量 22.方法的重载 23.方法的参数(ref,out,params) 24.类的继承 20.完善我的留言板(2) 21.完善我的留言板(3) 22.完善我的留言板(4) 25.异常处理 26....

    鹏哥特色教程之C#入门到精通 中级篇 1/5

    19.再说索引 20.构造函数和析构函数 21.静态类、静态方法、静态变量 22.方法的重载 23.方法的参数(ref,out,params) 24.类的继承 20.完善我的留言板(2) 21.完善我的留言板(3) 22.完善我的留言板(4) 25.异常处理 26....

    鹏哥特色教程之C#入门到精通 中级篇 3/5

    19.再说索引 20.构造函数和析构函数 21.静态类、静态方法、静态变量 22.方法的重载 23.方法的参数(ref,out,params) 24.类的继承 20.完善我的留言板(2) 21.完善我的留言板(3) 22.完善我的留言板(4) 25.异常处理 26....

    C#快速入门.doc

    引用类型..................................................................11 枚举 ...............................................................................12 类与结构 ............................

    [Visual.Basic.2010.入门经典(第6版)].Thearon.Willi等.扫描版(1/2)

    2.4 通用类型系统和公共语言 规范 ............................................ 26 2.5 小结 ............................................ 27 第3 章 编写软件 ................................ 29 ...

    完整版 Java初级教程 Java语言程序设计 第2章 基本数据类型、数组和枚举(共19页).ppt

    完整版 Java初级教程 Java语言程序设计 第2章 基本数据类型、数组和枚举(共19页).ppt 完整版 Java初级教程 Java语言程序设计 第3章 运算符、表达式、语句(共16页).ppt 完整版 Java初级教程 Java语言程序设计 第4...

    C#语言参考

    1.2.1 预定义类型..................................................................................................................................3 1.2.2 转换........................................

    c#从入门到精通/C#学习视频

    注意:文件较大网盘下载 01.第一讲Welcome.to.C# 02.第二讲变量、运算符、表达式 03.第三讲定义方法与变量作用域 ...09.第九讲枚举类型和结构体 10.第十讲数组和集合 11.第十一讲数组参数 ... 19.第十九讲枚举集合

Global site tag (gtag.js) - Google Analytics