服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

再论枚举器


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

扫描关注微信公众号