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