ただ日々を記すもの

意識高めを装うことができます

【Scala】importを柔軟に、クラス名に任意の名前が付けられる!

今回の内容は、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.Datesql.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は正常に使用できます

以上です。

使いどころが多いかはわからないですが、少し工夫すれば、かなり可読性は上がるんじゃないかなと思います。