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 が効かないため、変数の型を明示している