Scalaでのオブジェクトのパッケージ化、インポート、パッケージ化
1. 概要
このチュートリアルでは、Scalaでのオブジェクトのパッケージ化、インポート、およびパッケージ化の概念について説明します。
タイプ、パッケージの概念、およびいくつかの強力なパッケージ機能をインポートするさまざまな方法を見ていきます。
2. Scalaでのインポート
2.1. 基本的なインポート
単一のクラスのインポートは非常に簡単で、Javaなどの他のオブジェクト指向言語に似ています。
import com.baeldung.scala.packageimport.vehicle.Bicycle
パッケージ内のすべてのクラスをインポートする場合は、「_」表記を使用できます。
import com.baeldung.scala.packageimport.vehicle._
インポートするクラスを1行で指定することもできます。
import com.baeldung.scala.packageimport.vehicle.{Bicycle, Car, Vehicle}
2.2. インポートのエイリアシング
同じ名前のモジュールを異なるパッケージからインポートしなければならない場合があります。
import java.util.Date
import java.sql.Date
この場合、異なる日付形式を返す異なる日付クラスがあります。 java.sql.Dateは時刻情報なしで日付を表示します一方、java.util.Dateは日付と時刻情報を表示します 。
名前空間の衝突や混乱を避けるために、インポートステートメントでクラスのエイリアシングを設定する必要があります:
import java.util.{Date => utilDate}
import java.sql.{Date => sqlDate}
これで、エイリアスを他のオブジェクト名と同じように使用できます。
def run(): Unit = {
val dt: utilDate = new utilDate()
val dtSql: sqlDate = new sqlDate(System.currentTimeMillis())
println(s"I am a vehicle running on $dt !")
println(s"I am a vehicle running on $dtSql !")
}
クラスが出力できるものの例を見てみましょう。
I am a vehicle running on Wed May 27 13:50:53 CEST 2020 !
I am a vehicle running on 2020-05-27 !
2.3. インポート中にクラスを非表示にする
java.sql.date 形式のみを使用したいが、 java.util からすべてのモジュールをインポートする必要がある場合、javaを非表示にする必要があります。 util.date:
import java.util.{Date => _, _}
import java.sql.Date
これで、衝突を気にせずにdateオブジェクトを作成できます。
override def run(): Unit = {
super.run()
val dtSql: Date = new Date(System.currentTimeMillis())
println(s"$numberOfTires tires from the bicycle brand $brand are running on $dtSql")
}
3. Scalaでのパッケージ化
Scalaパッケージの作成は、Javaで私たちが知っている方法と似ています。 クラスの先頭でパッケージ名を宣言する必要があります。
package com.baeldung.scala
package object packageimport {
trait Motor {
val dieselMessage: String = "I am not environment friendly"
val noDieselMessage: String = "I am environment friendly"
}
}
さらに、中括弧を使用して、1つのファイルに複数のパッケージを配置する可能性があります。 この場合、異なるパッケージに同じ名前の2つのクラスを含めることができます:
package com.baeldung.scala.packageimport.vehicle {
import java.util.{Date => utilDate}
import java.sql.{Date => sqlDate}
abstract class Vehicle(numberOfTires: Int, brand: String) {
def run(): Unit = {
val dt: utilDate = new utilDate()
val dtSql: sqlDate = new sqlDate(System.currentTimeMillis())
println(s"I am a vehicle running on $dt !")
println(s"I am a vehicle running on $dtSql !")
}
}
}
package com.baeldung.scala.packageimport.vehicleNew {
import java.sql.{Date => sqlDate}
abstract class Vehicle(numberOfTires: Int, brand: String) {
def run(): Unit = {
val dtSql: sqlDate = new sqlDate(System.currentTimeMillis())
println(s"I am a NEW vehicle running on $dtSql !")
}
}
}
このアプローチを使用すると、com.baeldung.scala.packageimport.vehicleNew.Vehicleまたはcom.baeldung.scala.packageimport.vehicle.Vehicleのいずれかを使用できます。
次に、2番目のクラスにアクセスしてみましょう。
class Car(numberOfTires: Int, brand: String, isDiesel: Boolean) extends Vehicle(numberOfTires, brand) with Motor {
override def run(): Unit = {
super.run()
println(s"$numberOfTires tires from the brand $brand are running. It is a diesel motor: $isDiesel.")
if (isDiesel)
println(dieselMessage)
}
}
4. パッケージオブジェクト
パッケージごとに、パッケージのソースコードをに配置するパッケージオブジェクトを1つだけ作成できます。 Scalaの規則によれば、常にpackage.scalaと呼ぶ必要があります。
package com.baeldung.scala
package object packageimport {
val year = "2020"
trait Motor {
val dieselMessage: String = "I am not environment friendly"
val noDieselMessage: String = "I am environment friendly"
}
}
のすべてのメンバー com.baeldung.scala.package アクセスできるようになります年と
object bmwB38 extends Motor {
def run(): Unit =
println(s"I am a bmwB38 ! $noDieselMessage")
}
5. 結論
このチュートリアルでは、インポートの使用方法、他のコンポーネントのパッケージ化方法、およびパッケージオブジェクトの使用方法について説明しました。
パッケージをインポートするさまざまな方法、インポートからクラスを非表示にする方法、および同じ名前のクラスのインポートを処理する方法を検討しました。 さらに、パッケージングへのさまざまなアプローチを検討しました。
最後に、パッケージオブジェクトの強力な機能について説明しました。これは、メソッド、変数、およびその他のコンポーネントをトップレベルでカプセル化するのに役立ちます。
いつものように、コードはGitHubのにあります。