LoginSignup
0
0

More than 3 years have passed since last update.

オブジェクト/コンパニオンオブジェクトを拡張する

Last updated at Posted at 2021-03-18

概要

コンパニオンオブジェクトも同じくインスタンスであるため同じくimplicit classでメソッドを生やすことが出来るのでその方法を記す。

適用先

適用先としては以下の物が挙げられる。

  • テストでしか使用したくない・使用させたくないメソッドを定義したい
  • 外部ライブラリのオブジェクトにメソッドを追加したい

方法

objectの型はtypeで取ることが出来るので、それに対してimplicit classを定義しているだけである。t の部分は通常不要だが書かなければいけないので適当に書いている。また t をコンパニオンオブジェクトとして利用することも出来る。

object Scalab {

  def main(args: Array[String]): Unit = {

    SampleObject.newMethod
    // SampleObject!

    SampleCaseClass.newMethod
    // SampleCaseClass!

    println(SampleCaseClass.getNew)
    // SampleCaseClass(1)
  }

  object SampleObject

  implicit class SampleObjectOps(t: SampleObject.type) {

    def newMethod = println("SampleObject!")

  }

  case class SampleCaseClass(i: Int)

  implicit class SampleCaseClassOps(t: SampleCaseClass.type) {

    def newMethod = println("SampleCaseClass!")

    def getNew = t(1)
  }

}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0