查看一些scala 2.10.4库代码:
implicit def wrapIntArray(xs: Array[Int]): WrappedArray[Int] = if (xs ne null) new WrappedArray.ofInt(xs) else null
制作它有什么问题:
if (xs != null) new WrappedArray.ofInt(xs) else null
答案 0 :(得分:2)
考虑将其写为:
implicit def wrapIntArray(xs: Array[Int]): Option[WrappedArray[Int]] = Option(xs).map(new WrappedArray.ofInt)
并在选项“上下文”中工作(如果Option(xs)
为None
,xs
将为null
,而不是处理null
。
答案 1 :(得分:2)
理想情况下,应该编写这样做以完全避免空值,例如
implicit def wrapIntArray(xs: Array[Int]): Option[WrappedArray[Int]] =
Option(xs).map(a => new WrappedArray.ofInt(xs))
但是,鉴于这是一个库函数,可能无法更改其签名。我们仍然可以在内部使用Option方法:
implicit def wrapIntArray(xs: Array[Int]): WrappedArray[Int] =
Option(xs).map(a => new WrappedArray.ofInt(xs)).getOrElse(null)