将Java的Integer转换为Scala的Int

MyT*_*tle 9 java scala

我有一段返回的Java代码,java.lang.Integer它可以是null:

someClass.getMyInteger

但是当我在Scala类中使用它时,我收到此错误:

引起:scala.Predef $ .Integer2int的java.lang.NullPointerException(Predef.scala:357)

即斯卡拉隐含试图Java的转换Integer到Scala的Int(使用隐式Integer2int方法),但由于在这种情况下Integernull 它失败的异常.

如何解决这个问题呢?

Jac*_*eow 14

我会把它包装在一个选项中:

val x = Option(someClass.getMyInteger).map {_.toInt}
Run Code Online (Sandbox Code Playgroud)

例如,

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
Run Code Online (Sandbox Code Playgroud)