Javaライブラリの活用方法

ScalaはJava仮想マシン(JVM)上で動作する言語であるため、Javaとの統合性が非常に高く、Javaで書かれたライブラリをそのままScalaから利用することが可能です。以下では、ScalaにおけるJavaライブラリの活用方法について詳しく説明します。


1. Javaライブラリのインポートと使用

Javaのクラスやパッケージは、Scalaコード内でimport文を使って簡単にインポートできます。

例:java.util.ArrayListの利用

scala
import java.util.ArrayList val list = new ArrayList[String]() list.add("Scala") list.add("Java") println(list) // [Scala, Java]

Scalaではnewキーワードを使ってJavaのクラスをインスタンス化し、Javaのメソッドをそのまま呼び出すことができます。


2. ScalaからJavaメソッドの呼び出し

Javaクラスのインスタンスメソッドや静的メソッドをScalaから直接呼び出すことができます。

例:java.lang.Mathの静的メソッド

scala
val result = Math.pow(2, 3) // 2の3乗 println(result) // 8.0

Javaのstaticメソッドは、Scalaではクラス名を使って呼び出せます。


3. Javaコレクションとの互換性

ScalaとJavaの標準コレクションは互換性があるため、scala.jdk.CollectionConverters(または古いバージョンではJavaConverters)を使って相互変換が可能です。

例:JavaのリストをScalaのコレクションに変換

scala
import java.util.{ArrayList => JArrayList} import scala.jdk.CollectionConverters._ val jList = new JArrayList[String]() jList.add("A") jList.add("B") val scalaList: List[String] = jList.asScala.toList println(scalaList) // List(A, B)

4. Javaライブラリの依存関係の追加

JavaライブラリをScalaプロジェクト(sbtを使用)で使う場合は、sbtのbuild.sbtにライブラリ依存を記述します。

例:Apache Commons Langの追加

scala
libraryDependencies += "org.apache.commons" % "commons-lang3" % "3.12.0"

これにより、JavaライブラリのクラスやメソッドがScalaコードから利用可能になります。


5. JavaのインターフェースをScalaで実装

ScalaではJavaのインターフェースをimplementsの代わりにextendsで継承し、overrideを使ってメソッドを実装します。

例:Runnableインターフェースの実装

scala
val runnable = new Runnable { override def run(): Unit = println("Running in a thread") } new Thread(runnable).start()

このように、匿名クラスを使ってJavaのコールバック型APIに対応できます。


6. Javaのアノテーションの活用

Javaのアノテーション(例:@Override, @Deprecatedなど)もScalaコードにおいて使用できます。

scala
class MyClass { @Deprecated def oldMethod(): Unit = println("This method is deprecated.") }

まとめ

活用方法 説明
Javaクラスのインポート import文で直接Javaパッケージを指定可能
Javaメソッドの呼び出し インスタンス・静的メソッドをそのまま呼び出せる
コレクション変換 CollectionConvertersを用いてJava⇔Scala間で変換
sbtでの依存ライブラリ登録 libraryDependenciesでJavaライブラリを追加可能
Javaインターフェースの実装 RunnableなどをScalaの匿名クラスで実装可能
Javaアノテーションの利用 @OverrideなどをScalaコードに付加可能

ScalaはJavaとの高い互換性を活かして、既存のJava資産を無駄なく活用できます。これにより、Scalaの機能性とJavaの豊富なライブラリの両方を効果的に利用することが可能になります。

生成日:2025/05/04