ScalaとJavaの連携初歩

といいながら、Javaとの連携が気になっていたのでとりあえず簡単なサンプルを書いてJavaArrayListを使ってみました。

package com.appspot.seratch.scala

import java.util.ArrayList

object JavaArrayListSample {

  def main(arg : Array[String]) = {
    var list = new ArrayList[String]()
    list.add("hoge")
    list.add("foo")
    list.add("var")
    var iter = list.iterator
    while ( iter.hasNext() ) {
      var each = iter.next
      println(each)
    }
  }
  
}

なるほど、ちょっと感触を得てきた気がします。代入するときに型を指定せずvarで定義した変数に突っ込んでしまえるスクリプト言語的な自由さがあります。


追記(4/23):

型推論のある言語の経験がなくてよく知らなかったのですが、「スクリプト言語的な自由さ」というよりも、コードの記述での煩雑さを避ける事ができつつ、コンパイル時には型のチェックが厳密に行えるというところがポイントなのかなと。もう少ししっかり各種ドキュメントを読んだ方がよさそう。

[webmaster@localhost TypeInference]$ cat InferenceTest1.scala
object InferenceTest1 extends Application {

  val x = 1 + 2 * 3         // the type of x is Int
  val y = x.toString()      // the type of y is String
  def succ(x: Int) = x + 1  // method succ returns Int values

  val succX = succ(x)
  val succY = succ(y)

}
[webmaster@localhost TypeInference]$
[webmaster@localhost TypeInference]$ scalac InferenceTest1.scala
InferenceTest1.scala:8: error: type mismatch;
 found   : java.lang.String
 required: Int
  val succY = succ(y)
                   ^
one error found
[webmaster@localhost TypeInference]$