快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
ption {    // Add some items for good measure    manufacturers.add("Epiphone Guitars");    manufacturers.add("Gibson Guitars");    // Iterate with for/in      for (String manufacturer : manufacturers) {     out.println(manufacturer);    }   }   public static void main(String[] args) {    try {     CustomObjectTester tester = new CustomObjectTester();     tester.testListExtension(System.out);    } catch (Exception e) {     e.printStackTrace();    }   } }

手动处理遍历

在某些不常见的情况下 —— 老实说,我费了很大劲想到了很多 —— 在您的定制对象可以遍历的时候,您可能需要执行特定的行为。在这些(相当不幸)的情况下,您必须自己处理这些事情。清单 19 演示了如何做,虽然需要做很多工作,但是并不复杂,所以我把代码留给您自己来看。以下这个类提供了文本文件的包装器,在遍历它的时候,它将列出文件中的每行内容。

清单 19. 耐心点,您自己也能实现 Iterable 接口,并在循环中提供定制行为

package com.oreilly.tiger.ch07; import java.util.Iterator; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; /** * This class allows line-by-line iteration through a text file. *  The iterator''s remove() method throws UnsupportedOperatorException. *  The iterator wraps and rethrows IOExceptions as IllegalArgumentExceptions. */ public class TextFile implements Iterable<String> {   // Used by the TextFileIterator below   final String filename;   public TextFile(String filename) {    this.filename = filename;   }   // This is the one method of the Iterable interface   public Iterator<String> iterator() {    return new TextFileIterator();   }   // This non-static member class is the iterator implementation   class TextFileIterator implements Iterator<String> {    // The stream being read from    BufferedReader in;    // Return value of next call to next()    String nextline;    public TextFileIterator() {     // Open the file and read and remember the first line     //  Peek ahead like this for the benefit of hasNext()     try {      in = new BufferedReader(new FileReader(filename));      nextline = in.readLine();     } catch (IOException e) {      throw new IllegalArgumentException(e);     }    }    // If the next line is non-null, then we have a next line    public boolean hasNext() {     return nextline != null;    }    // Return the next line, but first read the line that follows it    public String next() {     try {      String result = nextline;      // If we haven''t reached EOF yet...      if (nextline != null) {       nextline = in.readLine(); // Read another line       if (nextline == null)        in.close(); // And close on EOF      }      // Return the line we read last time through      return result;     } catch (IOException e) {      throw new IllegalArgumentException(e);     }    }    // The file is read-only;

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