我有一段返回java.lang.Integer
的Java代码,它可以是null
:
someClass.getMyInteger
但是当我在Scala类中使用它时,我收到了这个错误:
引起:java.lang.NullPointerException at scala.Predef $ .Integer2int(Predef.scala:357)
即。 Scala隐式尝试将Java的Integer
转换为Scala的Int
(使用隐式Integer2int
方法),但由于在这种情况下Integer
为null
,因此异常失败。
如何解决这个问题?
答案 0 :(得分:9)
我会把它包装在一个选项中:
val x = Option(someClass.getMyInteger).map {_.toInt}
如,
scala> val oneInt: java.lang.Integer = 1
oneInt: Integer = 1
scala> val nullInt: java.lang.Integer = null
nullInt: Integer = null
scala> val oneOpt: Option[Int] = Option(oneInt).map {_.toInt}
oneOpt: Option[Int] = Some(1)
scala> val nullOpt: Option[Int] = Option(nullInt).map {_.toInt}
nullOpt: Option[Int] = None