Scala のコンパニオン オブジェクト
Mohammad Irfan
2023年6月21日
このチュートリアルでは、Scala での実行例を使用してコンパニオン オブジェクトについて説明します。
Scala のコンパニオン オブジェクト
コンパニオン オブジェクトは、クラスと同じ名前のオブジェクトであり、同様のファイルでクラスとして宣言されます。
たとえば、クラス名と同じ名前の Color
オブジェクトがあり、ファイルが Color.scala
として保存されている場合、このオブジェクトは Scala ではコンパニオン オブジェクトと見なされます。
例:
class Color {
}
object Color {
}
// Color.scala
コンパニオン オブジェクトを使用する利点は、クラスとオブジェクトの両方が互いのプライベート メンバーにアクセスできるようになったことです。 Scala は静的な概念を使用しませんが、コンパニオン オブジェクトを使用して同様の概念を収集できます。
new
キーワードを使用せずにオブジェクトを作成する
apply()
メソッドをコンパニオン オブジェクトに追加すると、new
キーワードを使用せずにオブジェクトを作成できます。
例:
class Color(val name: String){
private var _defaultname: String = "White"
def get():String = _defaultname
}
object Color {
def apply(name: String): Color = new Color(name)
}
object MyClass {
def main(args: Array[String]) {
val color = Color("Red")
println(color.name)
}
}
出力:
Red
クラスのインスタンスを分解する
同様に、unapply()
メソッドを使用して、クラスのインスタンスを分解できます。 unapply()
関数の後にそのメンバーにアクセスしようとすると、エラーが発生します。
例:
class Color(val name: String){
private var _defaultname: String = "White"
def get():String = _defaultname
}
object Color { // unapply function
def unapply(name: String): Color = new Color(name)
}
object MyClass {
def main(args: Array[String]) {
val color = Color("Red")
println(color.name)
}
}
出力:
error: Color.type does not take parameters
val color = Color("Red")
^