Cast to sequence in JavaFX

今回は 最近 『シーケンスをキャストしてはまった事』のエントリから 少し巷で話題になっているシーケンスのキャストに関連して...

リフレクションを使う上では避けて通れない シーケンスのキャストですが、私も id:shuji_w6e さんと同じ壁に...
しかし、簡単に諦める訳にもいかず、少し調査してみた。(id:hide1080 さんのコメントと同じく自分もこういうのは嫌いじゃないので...)
その中でちょっとした発見があったので書き留めておくことに...

発見その1:実は シーケンスは java.util.Iterable だった。

言われてみれば 当然だが、意識したことがなかったので ちょっと驚いた...

発見その2: for 式 には java.util.Iterable (と 配列)が指定できる。

結局 Java 5.0 から導入された 拡張 for 文と全く同じ...
シーケンスが特別扱いされているわけではなく、ただ単に Iterable だから for 式でループできるというだけのこと?

以上、ちょっとした発見でした。

で...
シーケンスをキャストしてはまった事』で紹介していただいた 以下の回避策は...

sequence = for (item in (obj as com.sun.javafx.runtime.sequence.ArraySequence)) item;
println(sequence.size()); // => 2

こんな感じで回避することもできるのです。
結局 シーケンスにキャストはできないのですが、それ程違和感なくシーケンスに変換できるのではないでしょうか?

sequence = for (item in obj as java.lang.Iterable) item;
println(sequence.size()); // => 2