Scala のコンパニオン オブジェクト

Mohammad Irfan 2023年6月21日
Scala のコンパニオン オブジェクト

このチュートリアルでは、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")
                         ^