2.8. java.lang.Iterable。イテレーターを使える目印。¶
Iterableはイテレーターを使用できるクラスで実現するインタフェースになります。
(Iter:イテレーター + able:できる = イテレーターを使うことができる)
つまり、イテレーターを使える目印になっています。
ですので、イテレーターを取得できる、ArrayListやHashSetなどはこれの対象です。
では、どのようなになっている見ていきたいと思います。
目次
2.8.1. クラス図へ変換¶
では、早速クラス図にしてみましょう。
UML変換くんを実行。
> touml .\java\lang\Iterable.java -o d:\temp\
※java1.8コード
※「-o d:temp」はクラス図の出力先です。
2.8.4. メソッドを眺めてみる。¶
2.8.4.1. iterator¶
~iterator():Iterator<T>
抽象メソッドなので実装はありません。子クラスがオーバーライドします。
イテレーターを取得するメソッドです。
iterator :繰り返し処理に使うもの、反復子。(iterate:繰り返す +or:使うもの)
2.8.4.2. forEach¶
~forEach(action:Consumer<?super T>):void
これは、defaultメソッドですので、処理が実装されています。
※defaultメソッドはjava1.8から追加された機能で、インタフェースに実装を書けます。
戻り値のない関数型インタフェースを引数にセットすると、for each(for文拡張)のようにforループを実行する。
つまりはfor構文ではなく、メソッドでfor eachを再現したものです。
※Consumerのvoid accept(T t)をオーバーライドします。
2.8.4.3. spliterator¶
~spliterator():Spliterator<T>
これは、defaultメソッドですので、処理が実装されています。
※defaultメソッドはjava1.8から追加された機能で、インタフェースに実装を書けます。
イテレーターの一種である、スプリッテレーターを返します。
処理は下記のようにSpliteratorsクラスのstaticメソッドに処理を丸投げしています。
※return Spliterators.spliteratorUnknownSize(iterator(), 0);
※イテレーターの一種です。イテレーターが扱う集合を簡単に分(split)けられます。分割したものを並列処理したりするときに便利です。