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行ずつ出力されます。

