scala-java8-compat Java8からScalaを使うためのライブラリ

retronymさんというScalaのコアのコミッターの人*1が、個人のリポジトリで作業してたものが、Scalaのorganizationに移ってました。

https://github.com/scala/scala-java8-compat

タイトルにも書きましたが、一言でいうと
「Java8からScala(のFunction1 traitなど)をラムダで便利に使うためのライブラリ」
です。


今のところは「Java8からScalaを使う場合」であって「ScalaからJava8のクラスを使う場合」ではありません。つまり、Scala使いの人にはあまり関係ありません。たとえば、これを使って嬉しい人というのは、akkaやPlay2をJavaで使う人などです。*2
ただし、今後例えばJava8から入ったStreamとScalaのコレクションクラスを相互変換するものなどが追加される可能性は大いにある(READMEに書いてある?)ので、
Scala使いの人にはあまり関係ありません」と書いた記述は修正することになると思います。


今までだったら、scala.Function1を継承した抽象classを一旦Scala側で作り、それをJava側で無名classで生成してつかう*3という方法だったのが、これを使うとJava8のラムダを使った短い記述でScalaのFunction1など*4が生成できるようになります。


これ書いてる2014-3-24現在公式リリースされてませんが、まぁそのうちすぐリリースされるでしょう。Scalaのorganizationにあるので、asyncやpicklingのように(準)標準ライブラリ的な位置づけなのでしょう。
実装的には現像それほど難しいことをしてるわけでけはなく、(ScalaのFunctionN traitはそのままではJava8のFunctional Interfaceにならないので)コード生成してるだけです。


もし似たようなものを作ろうとしている人、もしくは作り始めてしまった人がいたら、ちょっと待ったほうがいいと思います。こういうライブラリは、誰が作ってもたいして変わらないものになるだろうから、意味なく乱立するのはよくないでしょうし。
Scalaのorganizationで公式にやってくれるなら、まずはこれにpull reqやissue報告してほうがいいと思います。

*1:ここ1年くらい一番コミット数多いコミッター

*2:もちろん、他にも使い道はありそうですが

*3:もしくは、scala.runtime.AbstractFunction1の無名class生成

*4:厳密に言うとFunction1のサブクラス