null を None に変換する implicit conversion

Java のライブラリを利用していると None を返してほしいところで null を扱うことになります。if (value == null) ... とか value match { case null => .... } とか書くのに嫌気がさしてきたので、implicit conversion を利用して Option 型に変換するようにしました。

作成した implicit conversion のコードは以下のとおり。

object OptionConversion {
  implicit def anyToOptionConversion[T](value: T) = new OptionConversion(value)
}
class OptionConversion[T](value: T) {
  def toOption: Option[T] = value match {
    case null => None
    case _ => Some(value)
  }
}


使うときは import OptionConversion._ して Option にしたいところで toOption を使うだけです。
以下は使用例。*1

import OptionConversion._
object OptionConversionExample {
  def main(args: Array[String]): Unit = {
    val foo: String = "foo"
    val bar: String = null // (*1)

    println(foo.toOption)
    println(bar.toOption)
  }
}


Some(foo)
None

*1:val bar = null だと Null 型の変数になり、どうやら implicit conversion が効かないため、変数の型を明示している