今回の内容は、importについて。
Javaを知っていれば違和感なくimportを使うことができると思います。
ただ、Scalaならではの使い方もあったので、それの紹介。
まずは普通に
import java.util.Date object ScalaSample { def main(args: Array[String]): Unit = { println(new Date()) } }
この結果は、もちろんThu Oct 06 22:38:05 JST 2016
こんな感じ
インポートするクラス名を任意に設定
import java.util.{ Date => uDate} // DateをuDateとして使用できる object ScalaSample { def main(args: Array[String]): Unit = { println(new uDate()) // 結果は上と同じで現在時刻が表示される } }
上のように任意の名称に設定することが可能。
よく、util.Date
とsql.Date
でめんどくさくなっちゃう自分としては便利だなと感じました。
つまりはこんな感じで表現できるということ
import java.util.{ Date => uDate } import java.sql.{ Date => sDate } object ScalaSample { def main(args: Array[String]): Unit = { val date = new uDate() println(date) println(new sDate(date.getTime)) } }
実行結果は問題なく表示されます
Thu Oct 06 22:48:02 JST 2016 2016-10-06
一部のクラス名だけ変更したい
java.utilパッケージにある、Date以外のクラス使いたい!
そんな時も柔軟に対応してくれます。
import java.util.{ Date => uDate, ArrayList } object ScalaFirst { def main(args: Array[String]): Unit = { val date = new uDate() println(date) println(new ArrayList().isEmpty) // true } }
例えば、utilパッケージのクラスをすべてインポートしたい!加えてDateクラスだけは違う名前で扱いたい!そんな時は、
import java.util.{ Date => uDate, _ } object ScalaFirst { def main(args: Array[String]): Unit = { val date = new uDate() println(date) println(new ArrayList().isEmpty) // true } }
Scalaでは、パッケージ内のすべてのクラスを参照したい時はアンダースコア(_)
を使用します。
(Javaでいう*
に該当)
また、Date以外のクラスをインポートしたい時は、
import java.util.{ Date => _, _ } object ScalaFirst { def main(args: Array[String]): Unit = { // val date = new uDate() コメントアウトを外すとエラーに // println(date) println(new ArrayList().isEmpty) // true } }
コメントアウトを外すとエラーが出てしまいます。
これは、Date => _
とすることで、Dateをインポートされる名前から取り除くということになる。
(名前を_
に変えるということは、それを隠すという意味らしい...)
ArrayListは正常に使用できます
以上です。
使いどころが多いかはわからないですが、少し工夫すれば、かなり可読性は上がるんじゃないかなと思います。