Scala for expression with Java Collection

1行の import を加えるだけで Scala の for expression で Java の collection を iterate できる。

http://www.scala-lang.org/docu/files/collections-api/collections_46.html

例は、Hashtable のサブクラスである Properties を Scala の for expression で iterate。

Properties の初期化部分は、いちいち props.setProperty を繰り返し書きたくなかったので、trait などの anonymous subclass の説明で出てきたような書き方を行うと、期待した動作になった。つまり、いちいち props. の部分を指定しなくてすむ。実際には Properties を親に持つ anonymous class が作られ、コンストラクタで、これらの setProperties が呼ばれるバイトコードになる。

import java.util._
import collection.JavaConversions._
object Prop {
  def main(args: Array[String]) {
    val props = new Properties() {
      setProperty("US", "DC")
      setProperty("UK", "London")
      setProperty("JP", "Tokyo")
    }
    for ((k,v) <- props) {
      println(k + ": " + v)
    }
    println(props.getClass.toString)
  }
}