返回介绍

8.4.5 再论枚举器

发布于 2024-10-15 23:56:20 字数 1248 浏览 0 评论 0 收藏 0

我们现在可以开始演示 Enumeration(枚举)的真正威力:将穿越一个序列的操作与那个序列的基础结构分隔开。在下面的例子里,PrintData 类用一个 Enumeration 在一个序列中移动,并为每个对象都调用 toString() 方法。此时创建了两个不同类型的集合:一个 Vector 和一个 Hashtable。并且在它们里面分别填充 Mouse 和 Hamster 对象(本章早些时候已定义了这些类;注意必须先编译 HamsterMaze.java 和 WorksAnyway.java,否则下面的程序不能编译)。由于 Enumeration 隐藏了基层集合的结构,所以 PrintData 不知道或者不关心 Enumeration 来自于什么类型的集合:

//: Enumerators2.java
// Revisiting Enumerations
import java.util.*;

class PrintData {
  static void print(Enumeration e) {
    while(e.hasMoreElements())
      System.out.println(
        e.nextElement().toString());
  }
}

class Enumerators2 {
  public static void main(String[] args) {
    Vector v = new Vector();
    for(int i = 0; i < 5; i++)
      v.addElement(new Mouse(i));

    Hashtable h = new Hashtable();
    for(int i = 0; i < 5; i++)
      h.put(new Integer(i), new Hamster(i));

    System.out.println("Vector");
    PrintData.print(v.elements());
    System.out.println("Hashtable");
    PrintData.print(h.elements());
  }
} ///:~

注意 PrintData.print() 利用了这些集合中的对象属于 Object 类这一事实,所以它调用了 toString()。但在解决自己的实际问题时,经常都要保证自己的 Enumeration 穿越某种特定类型的集合。例如,可能要求集合中的所有元素都是一个 Shape(几何形状),并含有 draw() 方法。若出现这种情况,必须从 Enumeration.nextElement() 返回的 Object 进行下溯造型,以便产生一个 Shape。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文