コンパイル結果が.classファイルになるので、javaから普通に呼び出すことが出来るみたいです。
なので、scalaのコードをコンパイルして、jarを生成し、そのjarをjavaから呼び出すサンプルプログラムを書いてみました。
まずscalaのコード。
object JarMain {
def main(args:Array[String]) = {
println("Hi, I am Scala.");
println("I've got your message:");
for (elem <- args) println("> " + elem);
}
}
これをscalaでコンパイルした後、javaのコマンドを用いてjarを生成する。
それを呼び出すjavaのコードは下記のよう。
public class Main {
public static void main(String args[]){
String[] strs={"Hi, I'm Java"};
JarMain.main(strs);
}
}
で、実行結果
Hi, I am Scala. I've got your message: > Hi, I'm Java
簡単。そして地味にすごい。
最終的にjarに落としこむことができるので、ひとつのjavaプロジェクトの中で一部分だけscalaで書くということが簡単に実現できる。
これはtraditionalで大規模な開発を行なっている企業には特に嬉しい。
一つのプロジェクトで一部分だけscalaでスモールスタートして、様子を検証しつつ、上手く行ったら徐々にscalaに置き換えていくストーリーが実現可能になる。
この点は非常に重要で、例えば一昔まえに流行ったruby on railsなんかだと、導入するとなったら全部変えなきゃいけないので、アーキテクチャ全体の変更が必要だわ、多数のエンジニアの教育が必要だわ、とかくtraditionalな会社では導入の敷居がかなり高かった。
でもscalaならまずは最小限からスタートさせて徐々にjavaを置き換えていくということも簡単に出来るので、保守的かつ大規模に開発している企業とかでも容易に導入が進みそう。