首页产品库评测行情新闻|手机数码笔记本台式机DIY硬件数字家庭数码相机办公外设|软件下载游戏开发|社区

更多

数码相机
MP4
LCD
机箱
音箱

软件资讯设计 工具 系统 开发 安全 办公 陶吧 IT教育 Vista频道 | 下载中心酷我音乐盒 腾讯QQ
天极网 > 开发频道>驯服Tiger之深入研究枚举类型

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

2005-06-01 10:26作者:John Zukowski出处:ibm责任编辑:方舟

  基础知识

  在J2SE1.5中通过使用新的 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);
 }
}

  运行该程序将返回给定 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

关注此文的读者还看过:

返回开发频道首页

共2页。 12下一页

软件频道最新更新

热点推荐

IT嘉年华

编辑推荐

软件下载

热门
推荐

网友关注

软件
资料
游戏

装机推荐

文章排行

本周
本月
最新更新
天极服务|关于我们|About us|网站律师|RSS订阅|友情合作|加入我们|天极动态|网站地图|意见反馈|MSN/QQ上看天极
Copyright (C) 1999-2012 Yesky.com, All Rights Reserved 版权所有 天极网络