快速业务通道

在Eclipse 3.1中体验J2SE 5.0的新特性: 第一部分 :枚举类型 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
m< Priority >("High", 0);  new Enum< Priority >("Medium", 1);  new Enum< Priority >("Low", 2);

每一个创建的枚举类型都是Enum 的子类,除 了上面调用父类 Enum 的构造函数外,枚举类型可以使用参数为定义一些自己的构造函数 .当声明值时,只需调用此枚举类型定义的构造函数,而且不必添加 new 关键字.在清单3 里, Priority 的一个实例生成,这个实例就是High (38).

清单3.其它构造函 数调用

enum Priority {   High (38),   Medium (36.5),   Low (5.2);   double temperature;   Priority (double p)       temperature = p;   }

在Eclipse 3.1中体验J2SE 5.0的新特性: 第一部分 :枚举类型(3)

时间:2011-04-02 IBM 邹青 吴嫣 吴疆

另外要强调 的两点: 一是这些枚举类型的构造函数都是私有的.它是不能被其它的类或者其它的枚举 类型调用的. 而且这个私有修饰符是由编译器自动加的,如果我们定义这些构造函数时,在 前面加上public 修饰符, 就会导致编译错误, 如下图5所示. 二是变量定义必须在枚举类 型值定义之后. 上图中double temperature 必须在枚举类型值定义完了(分号表示枚举类 型值定义完了, 如 Low(5.2);) 才能声明.

图4. 枚举类型的构造函数是私有的

在Eclipse 3.1中体验J2SE 5.0的新特性: 第一部分 :枚举类型 - 编程入门网

在J2SE 5.0以前,当我们实现一个枚举类时,一般都是把一个整数关联到此枚举类的 某一个值的名字,出现的问题是同一个整数可以代表不同枚举类的值. 下面的例子里定义 两个枚举类 Course and Grade 如下:

清单4.

public class Course {    public static final int EnglishLit    = 1;    public static final int Calculus     = 2;    public static final int MusicTheory   = 3;    public static final int MusicPerformance = 4;   } public class Grade {   public static final int A = 1;   public static final int B = 2;   public static final int C = 3;   public static final int D = 4;   public static final int F = 5;   public static final int INCOMPLETE = 6; }

如果开发者误把student1.assignGrade(Grade.A)写成student1.assignGrade (Course.EnglishList); 在编译 阶段是不能发现问题的,如果用J2SE 5.0 枚举类型 (enum)可以避免这些问题.

枚举类型每一个值都是public, static and final的.也就是说,这些值是唯一的而且 一旦定义了是不能被重写或修改.而且尽管在枚举类型每一个值声明时没有出现static关 键字, 实际上值都是静态的, 而且我们不能在值前面加上static, public,final 修饰 符,否则就会出现下图 6的错误.

图5 枚举类型值的错误声明

在Eclipse 3.1中体验J2SE 5.0的新特性: 第一部分 :枚举类型 - 编程入门网

枚举类型都实现了java.lang.Comparable,枚举类型的值是可以比较排序的, 排列顺序就是枚举类型定义这些值的顺序.

在Eclipse 3.1中体验J2SE 5.0的新特性: 第一部分 :枚举类型(4)

时间:2011-04-02 IBM 邹青 吴嫣 吴疆

1.3 枚举类型的应用

下面各小 节介绍了枚举类型的各种应用.

1.3.1循环(Iteration)

当我们写程序时 ,常常遇到对数组或列表里的每一个对象进行处理的情况.在J2SE 5.0以前,如果要在一 个数组或列表里进行轮循时,我们的做法比较繁琐,需要借助java.util.Iterator 类, 如下所示:

清单5:

List priorities = Priority.values().; for (Iterator iter = priorities.iterator(); iter.hasNext();) {    Priority p = (Priority) iter.next();   process(p); }

现在我们可以通过J2SE 5.0 的for/in loop和枚举类型一起使用. 这能使以前花很多时间 写的程序简单化,如上面清单5的程序可简化为:

清单6:

for (Priority g: Priority

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号