目次へ

2005.11.07 株式会社四次元データ CTO 畠中晃弘

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

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp