如何将 scala Int 转换为 java Integer?

2022-09-04 20:49:41

我是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])

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

我不知道如何解决这个问题。有人可以帮我吗?谢谢。


答案 1

您需要做的就是将 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

答案 2

我认为大多数其他答案都涵盖了它,你的问题是使用Option,而不是scala和java整数之间的区别。您可以使用选项执行许多操作,例如:给定: 给定:

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

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

在上面,您可以使用地图或匹配/案例代替。