快速业务通道

用for/in在Java 5.0中增强循环 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
   //  of using a Set, word order is lost, and duplicates are discarded.    System.out.println("Printing words from wordset " +     "(unordered, no duplicates)...");    for (      String word : wordset) {     System.out.print((String)word + " ");    }   } }

当然,在这些例子中,类型转换还没有完全消失。但是,这些工作正逐步转交给编译器完成(如果您对这类事情感兴趣,那么可以说这就是泛型或多或少要做的事)。在编译的时候,所有这些类型都会被检测,您可能得到相应的错误信息。如果有人能做这项工作,那么,其他所有人也能这么做,不是吗?

用for/in在Java 5.0中增强循环(6)

时间:2011-02-05 Brett McLaughlin

类与 for/in 的集成

迄今为止,我只是针对 Java 事先打包的类和类型(array、list、map、set 和其他集合)进行遍历。尽管这已经相当不错,但编程语言的美丽在于它们能帮助您定义自己的类。定制对象是大型应用程序的支柱。这一节要处理的只是允许 for/in 构造使用您自己的对象所涉及的一些概念与步骤。

一个新接口

到了现在,您应当熟悉 java.util.Iterator 接口了,倘若您不熟悉它,清单 15 演示了这个接口,而且是按照它在 Tiger 出现的形式演示的:

清单 15. Iterator 长时间以来一直是 Java 语言的中流砥柱

package java.util; public interface Iterator<E> {   public boolean hasNext();   public E next();   public void remove(); }

但是,为了利用 for/in,需要在您的域知识中添加另一个接口 java.lang.Iterable。该接口如清单 16 所示:

清单 16. Iterable 接口是 for/in 构造的基础

package java.lang; public interface Iterable<E> {   public java.util.Iterator<E> iterator(); }

为了让您的对象或类能与 for/in 一起工作,对象和类需要实现 Iterable 接口。这留给您两个基本场景:

扩展现有的、已经实现了 Iterable(因此也就已经支持 for/in)的集合类。

手动处理遍历,定义自己的 Iterable 实现。

手动处理遍历

如果有可能,我极力建议您用定制对象扩展现有的集合。事情会变得极为简单,而您可以避免所有繁琐的细节。清单 17 显示了一个这样做的类:

清单 17. 扩展现有的集合是利用 for/in 的捷径

package com.oreilly.tiger.ch07; import java.util.LinkedList; import java.util.List; public class GuitarManufacturerList extends LinkedList<String> {   public GuitarManufacturerList() {    super();   }   public boolean add(String manufacturer) {    if (manufacturer.indexOf("Guitars") == -1) {     return false;    } else {     super.add(manufacturer);     return true;    }   } } 

用for/in在Java 5.0中增强循环(7)

时间:2011-02-05 Brett McLaughlin

因为 LinkedList 已经可以使用 for/in,所以,不需要特殊的代码,就可以在 for/in 中使用这个新类。清单 18 演示了这点,以及做到这一点需要做的工作是多么地少:

清单 18. Iterable 接口是 for/in 构造的基础

package com.oreilly.tiger.ch07; import java.io.IOException; import java.io.PrintStream; public class CustomObjectTester {      /** A custom object that extends List */   private GuitarManufacturerList manufacturers;   public CustomObjectTester() {      this.manufacturers = new GuitarManufacturerList<String>();   }   public void testListExtension(PrintStream out) throws IOExce

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