概要
コンパニオンオブジェクトも同じくインスタンスであるため同じく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)
}
}