是一种更好的方法来检查null比!=?

时间:2015-12-03 11:41:59

标签: scala

查看一些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

2 个答案:

答案 0 :(得分:2)

考虑将其写为:

implicit def wrapIntArray(xs: Array[Int]): Option[WrappedArray[Int]] = Option(xs).map(new WrappedArray.ofInt)

并在选项“上下文”中工作(如果Option(xs)Nonexs将为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)