快速业务通道

驯服Tiger: 深入研究枚举类型 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20

驯服Tiger: 深入研究枚举类型

时间:2011-01-31 IBM John Zukowski

基础知识

正如 Brett McLaughlin 在他的文章“枚举类型入门”中所描述的那样(推荐您先阅读这篇文章),通过使用新的 enum 关键字创建指定的对象集合,您可以创建一个枚举类型。然后,可以将每个指定的值看作是那个类的一个实例,这为您提供了指定的整数集合所无法提供的编译时类型安全。清单 1 将创建一个枚举类型,并将类型安全的枚举值作为帮助器方法(helper method)的参数。该枚举类型的 values() 方法返回这种类型的不同值的有序数组。

清单 1. 枚举类型的例子

public class Loop {   enum Size {    Small,    Medium,    Large   }   public static void main(String args[]) {    for (Size s : Size.values()) {     helper(s);    }   }   private static void helper(Size s) {    System.out.println("Size value: " + s);   } }

构造函数、方法和变量

在使用 enum 关键字创建新的枚举类型时,实际上是在创建 java.lang.Enum 类的子类,其中,枚举类型符合通用模式 Class Enum<E extends Enum<E>>,而 E 表示枚举类型的名称。枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了每个设置的优先值。换句话说,enum Size {Small, Medium, Large} 将映射到清单 2 中所示的构造函数调用中:

清单 2. 映射的构造函数调用

new Enum<Size>("Small", 0);   new Enum<Size>("Medium", 1);   new Enum<Size>("Large", 2);

不必将构造函数的使用限制为间接 Enum 构造函数调用。在使用 enum 关键字时,将创建 Enum 的子类。您可以使用参数和任何别的东西为定义的每个名称添加一些您自己的构造函数调用。名称声明可以看作是对构造函数的调用,您不必添加 new 关键字。这种方法允许您将数据作为参数值传递给构造函数调用,如清单 3 所示。该参数表示 Size 对象的枚举集合的定价因子。位于枚举类型定义之后的 main() 方法演示了这种用法。

清单 3. 定制构造函数的例子

public class Sample {   enum Size {    Small(0.8),    Medium(1.0),    Large(1.2);    double pricingFactor;    Size(double p) {     pricingFactor = p;    }   }   public static void main(String args[]) {    Size s = Size.Large;    double d = s.pricingFactor;    System.out.println(s + " Size has pricing factor of " + d);   } }

驯服Tiger: 深入研究枚举类型(2)

时间:2011-01-31 IBM John Zukowski

运行该程序将返回给定 Size 的定价因子。您还可以定义一个类似于 getPricingFactor() 的方法,并将 pricingFactor 字段设置为 private,以便更多地将它作为类 JavaBean 的属性对待。清单 4 给前面的例子添加了一个方法:

清单 4. 方法的例子

public class Sample2 {   enum Size {    Small(0.8),    Medium(1.0),    Large(1.2);    private double pricingFactor;    Size(double p) {     pricingFactor = p;    }    public double getPricingFactor() {     return pricingFactor;    }   }   public static void main(String args[]) {    Size s = Size.Large;    double d = s.getPricingFactor();    System.out.println(s + " Size has pricing factor of " + d);   } }

对于这两种情况,输出均为:

Large Size has pricing factor of 1.2

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号