在Eclipse 3.1中体验J2SE 5.0的新特性: 第一部分 :枚举类型 - 编程入门网
.values()){
process(g);
}
我们 把上面的伪代码写成程序在Eclipse3.1上运行,如下图所示,在右下控制平台视图里显示 了运行结果.如果看不见控制平台,点击Window->Other Views->Console, 控制平 台就会出现在右下角. 图6 枚举类型在循环中的应用 我们 在使用for/in loop 时要求它的表达式要求必须是数组或者是实现了java.lang.Iterable 的集合,而枚举类型的values()函数返回的就是一个数组.另外循环变量的声明必须是在 loop里, 包括变量类型和变量名. 我们不能在循环里使用一个在循环之外声明的变量.这和J2SE 5.0以前for loop 里用 的循环变量的声明不同. 1.3.2 转换(Switch) 我们常用的一种判断语句就是Switch-case 语句. 在Switch 语句中使用枚举类型,不 仅能简化程序,而且增强了程序的可读性. 清单8.
在Eclipse 3.1中体验J2SE 5.0的新特性: 第一部分 :枚举类型(5)时间:2011-04-02 IBM 邹青 吴嫣 吴疆在Switch语句里使用枚举类型时,一定不能在每一个枚举类型值的前面加上枚举类型 的类名,否则编译器就会报错(会导致编译错误???). 我们把上面的程序稍作修改,在 case 语句里加上枚举类型的类名并运行在Eclipse 3.1 平台上. 我们发现Eclipse 的问 题视图里提示case 语句里枚举类型值的前面加上枚举类型的类名是错误的, 如下图8所 示. 图7: case 语句里枚举类型的值 原因是J2SE 5.0的实现要求case 语句里每一个枚举类型值是不能有枚举类型类作为前 缀的.前面谈到过每一个枚举类型的值都是枚举类型的一个实例.那么当编译器编译case语 句时, 是如何处理这些实例的? 这有两种情况:如果switch 与枚举类型定义在同一个编 译单元, 第一次编译时一个新表会创建在内存里. 在这个表里, 每一个枚举类型的值都和 它在枚举类型里定义的顺序关联起来. 编译器编译结果就和下面清单9显示的的程序很像. 只不过顺序号没有加到程序里, 而是编译器在表里快速查询. 如果枚举类型被修改或从定 义,表会被更新. 清单 9:
还有一种经常出现的情况是 switch 与枚举类型定义不是在同一个编译单元.在这种情 况下, 大多数编译器就会把switch-case 语句翻译成一系列的if/else 语句: 清单 10:
1.3.3 Maps of Enum and Sets of Enum 在J2SE 5.0 的java.util 程序包中提供两个新类:EnumMap 和 EnumSet,这两个类与 枚举类型的结合应用可使以前非常繁琐的程序变得简单方便 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |