2005.11.07 株式会社四次元データ CTO 畠中晃弘
Java言語機能(JDK5.0(Tiger)新機能) 2章 拡張for文
- 2.1. 拡張for文
- 2.2. java.lang.Iterable
2.2. java.lang.Iterable
前節で説明しましたが、拡張for文で指定することができるのは配列もしくはIterableインタフェースを実装したクラスのインスタンスです。 従ってこのインタフェースを実装すれば、独自のクラスのインスタンスも拡張for文で使用可能となります。
import java.util.Iterator; public class IterableSample implements Iterable<Character>, Iterator<Character> { private String text = ""; public IterableSample(String text) { this.text = text; } public Iterator<Character> iterator() { return this; } private int curr = 0; public boolean hasNext() { if (text.length() > curr) { return true; } return false; } public Character next() { return text.charAt(curr++); } public void remove() { // 何もしない } }
上記はIterableを実装した独自のクラスです。 ややこしいですが、IterableとIteratorの両方を実装しており、iterator()メソッドでは自分自身を返しています。 Iteratorは内部に保持している文字列から1文字ずつ取り出す実装となっています。 従って
IterableSample sample = new IterableSample("四次元データ"); for (Character c : sample) { System.out.println(c); }
を実装すると、「四次元データ」という文字列が1文字1行ずつ出力されます。