将Java的Integer转换为Scala的Int

时间:2015-08-12 23:36:31

标签: java scala

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

someClass.getMyInteger

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

  

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

即。 Scala隐式尝试将Java的Integer转换为Scala的Int(使用隐式Integer2int方法),但由于在这种情况下Integernull,因此异常失败。

如何解决这个问题?

1 个答案:

答案 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