再论枚举器

我们现在可以开始演示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。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索vector
, enumeration
, hashtable
, print
, 序列
, 枚举与集合
, 一个
, enumerate
再论继承
枚举器、创建设备枚举器错误、蓝牙枚举器、蓝牙le枚举器、枚举进程定时器,以便于您获取更多的相关知识。

时间: 2024-10-04 09:56:13

再论枚举器的相关文章

java的枚举器(反复器)

在任何集合类中,必须通过某种方法在其中置入对象,再用另一种方法从中取得对象.毕竟,容纳各种各样的对象正是集合的首要任务.在Vector中,addElement()便是我们插入对象采用的方法,而elementAt()是提取对象的唯一方法.Vector非常灵活,我们可在任何时候选择任何东西,并可使用不同的索引选择多个元素. 若从更高的角度看这个问题,就会发现它的一个缺陷:需要事先知道集合的准确类型,否则无法使用.乍看来,这一点似乎没什么关系.但假若最开始决定使用Vector,后来在程序中又决定(考虑

枚举器模式(Enumerator pattern)

如何使用枚举器模式(Enumerator pattern): 1.  如果你要实现IEnumerable.GetEnumerator,你也要实现一个GetEnumerator方法的非虚方法版本.你的枚举器类的IEnumerable.GetEnumerator方法应该调用这个非虚方法.如下所示应该返回一个内嵌的枚举器结构: ·                           class MyClass : IEnumerable ·                           { · 

C#中的枚举器

Iterator:枚举器 如果你正在创建一个表现和行为都类似于集合的类,允许类的用户使用foreach语句对集合中的成员进行枚举将会是很方便的.这在C# 2.0中比 C# 1.1更容易实现一些.作为演示,我们先在 C# 1.1中为一个简单的集合添加枚举,然后我们修改这个范例,使用新的C#2.0 枚举构建方法. 我们将以创建一个简单化的List Box作为开始,它将包含一个8字符串的数组和一个整型,这个整型用于记录数组中已经添加了多少字符串.构造函数将对数组进行初始化并使用传递进来的参数填充它.

如何使用系统设备枚举器

系统设备枚举器为我们按类型枚举已注册在系统中的Fitler提供了统一的方法.而且它能够区分不同的硬件设备,即便是同一个Filter支持它们.这对那些使用Windows驱动模型和KSProxy Filter的设备来说是非常有用的.系统设备枚举器对它们按不同的设备实例进行对待(译注:虽然它们支持相同Filter). 当我们利用系统设备枚举器查询设备的时候,系统设备枚举器为特定类型的设备(如,音频捕获和视频压缩)生成了一张枚举表(Enumerator).类型枚举器(Category enumerato

[JAVA100例]005、哈希表(Hashtable)和枚举器

public class RoleRight { private static Hashtable rightList = new Hashtable(); /** *<br>方法说明:初始化数据 *<br>输入参数: *<br>返回类型: */ public void init() { String[] accRoleList = {"admin","satrap","manager","user&

SSIS从理论到实战,再到应用(2)----SSIS包的控制流

原文:SSIS从理论到实战,再到应用(2)----SSIS包的控制流     前文回顾:   SSIS从理论到实战,再到应用(1)----创建自己的第一个包     上次说到创建了自己的第一个包,完成了简单的数据从数据库=>数据库,以及Excel文件=>数据库过程,这一次咱们回看看一个包里面到底有哪些好玩的元素构成:     咱们一般写过代码的人都知道,很多的看似很复杂的功能都是由:顺序,选择,循环构成的.SSIS也不例外,咱们可以看到SSIS包里面工具选项卡里面已经写出他的本质了:    

Ruby 枚举的使用详解

通过  each 获得枚举能力 想要枚举的 Class 就得有一个 each 方法,它的工作就是 yield 项目给代码块,每次一个. each 做的事在不同的类上可能不太一样,比如在数组上,each 会 yield 第一个项目,然后是第二个,第三个 ...  在 hash 里,yield 的是 key/value 作为两个元素的数组.在 file 处理上,每次会 yield 一行内容.range 迭代会先看一下有没有可能迭代,然后假装它是一个数组.在自己的类里定义了 each 方法,它的意思是

用新VB.NET 枚举提高效率

当你还使用For-Each循环或者是For 1 To Count 循环处理集合的时候,VB .NET中加入了一种新的技术,IEnumerator界面. IEnumerator界面支持两种方法和一种特性.MoveNext方法能在集合中一次移动一条记录.Reset方法能使枚举器复位到集合的起始.Current特性能从集合返回当前记录. 下面的程序显示了这三种计算集合的可能的办法. Dim testCollection As New Collection()Dim collectionItem As

实例解析C++/CLI中的继承与枚举

本文中,将要介绍与继承相关的C++/CLI主题,并以现实生活中银行交易的三种形式:存款.取款.转账,来说明类的继承体系,且以一种新的枚举形式来实现. 枚举器 请看例1中声明的类型,它存在于其自身的源文件中,并编译为一个只包含此类型的程序集: 例1: public enum class TransactionType : unsigned char {Deposit, Withdrawal, Transfer}; 与想像的一样,枚举器中的Deposit.Withdrawal.Transfer分别代