Scala で既存の型を拡張する
こんにちは、 @kz_morita です。
今回は、Scala で implicit class を用いて既存の型を拡張する方法について書きます。
Scala3 で新しく、 extension も追加されたので見ていきます。
Scala 2 の場合 Scala 2 の場合、implicit class を用いて拡張することができます。
以下サンプルコードです。
架空の Item クラスと、ItemDto クラスの変換を考えて適当なバリデーション済みのリストを返したいみたいなケースです。
case class ItemDto(val name: String) case class Item(val name: String) object Converter { implicit class DtoList(dtos: Seq[ItemDto]) { def toValidModel(): Seq[Item] = { dtos.filterNot(dto => dto.name.contains("invalid")) .map(dto => Item(dto.name)) } } } val dtoList = Seq(ItemDto("Hoge"), ItemDto("Fuga invalid"), ItemDto("Piyo")) // Seq[ItemDto] 型に toValidModel メソッドが生えてる println(dtoList.toValidModel()) 下記のように定義することで、Seq (ItemDto) 型に toValidModel() のメソッドを拡張することができます。