如何将scala Int转换为java Integer?

Gol*_*irl 8 java int integer scala

我是scala的新手,并与scala和Java一起工作。

我试图将scala Int传递给接受Integer(java.long.Integer)的方法。由于它们的类型不同,编译器会给出错误信息。

 /* name- Option[String], id- Option[Integer] , mask- Option[String]*/
 new findingFrame(name,id, mask)

 case class findingFrame(name: String,
                         id: Option[java.lang.Integer],
                         mask : Option[String])
Run Code Online (Sandbox Code Playgroud)

我尝试使用.instanceOf [java.lang.Integer],但这也不起作用。

我不确定如何解决此问题。有人可以帮我吗?谢谢。

小智 8

您需要做的就是将 int 值传递给 Integer() 的构造函数。您现在可以传递这个新对象。

scala> val n = 20
n: Int = 20

scala> new Integer(n)
res0: Integer = 20

scala> res0.getClass
res1: Class[_ <: Integer] = class java.lang.Integer
Run Code Online (Sandbox Code Playgroud)


小智 2

我认为大多数其他答案都涵盖了它,您的问题是 Option 的使用,而不是 scala 和 java 整数之间的差异。您可以使用选项做很多事情,例如: 给定:

val optionOfInteger = Option(5)
Run Code Online (Sandbox Code Playgroud)
  • (丑陋)假设你的选项总是有一个值,只需使用 get ( val i = optionOfInteger.get)
  • 应用默认值:( val i = optionOfInteger.getOrElse(0))
  • 您可以将整数的选项映射到其他选项 ( val optionOfString = optionOfInteger.map(_.toString))
  • 您可以在一次调用中完成最后两项操作 ( val str = optionOfInteger.fold("Nothing")(_.toString))
  • 您还可以将 Option 视为一个集合,因此您可以使用 Options 执行的所有集合操作,包括将其转换为其他类型的集合、折叠它等。在您的情况下可以很好地使用它,可能是决定调用或不调用 java 方法。

def myFn(findingFrame: FindingFrame) = { findingFrame.in.foreach{i => javaMethod(i) } }

在上面你可以使用map,或者match/case来代替。