[英]scala.MatchError: null on scala
我收到以下错误.. scala.MatchError:null
我的代码有问题吗? 如果是这样,我该如何解决?
val a : Option[String] = {
company.customUrl match {
case Some(a) => company.a
case None => null
}
}
val b :Option[String] = {
company.b match {
case Some(b) => company.b
case _ => null
}
}
val c : Option[Long] = {
company.c match {
case Some(c) => Option(company.c.get.toLong)
case _ => null
}
}
a,b,c
的返回类型都是Òption
,但每隔第二种情况的原始类型null
都不是。 尝试返回None
。
a
第二种情况应该抓住所有_
b
也可以简化为val b :Option[String] = company.b
在第一种情况下,您的customUrl
必须为null值:
scala> (null: Any) match { case Some(x) => x ; case None => ??? }
scala.MatchError: null
... 29 elided
最好尽快在Option中包装可为空的值,而不要对其进行包装。 特别是,请勿将“选项”设置为null。
Option
是为了完全避免null
。 Option
永远不应为null
; 相反,它应该为None
。 因此,您不应该做这种奇怪的舞蹈:
val a: Option[String] = company.customUrl match {
case Some(a) => company.a
case None => null
}
只是val a = company.customUrl
就可以了。
这也可能是MatchError
的原因。 由于代码的其他部分, company.customUrl
, company.b
或company.c
一个或多个为null
。
重申: Option
永远不能为null
。 此外,在Scala中,请始终尝试避免使用null
并更喜欢Option
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.