如何将scala Int转换为java整数?

如何将scala Int转换为java整数?,java,scala,integer,int,Java,Scala,Integer,Int,我是scala的新手,并与scala和Java一起工作 我试图将scala Int传递给一个接受整数(java.long.Integer)的方法。由于它们的类型不同,编译器会给出一个错误 /* name- Option[String], id- Option[Integer] , mask- Option[String]*/ new findingFrame(name,id, mask) case class findingFrame(name: String,

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

我试图将scala Int传递给一个接受整数(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],但这也不起作用

我不知道如何解决这个问题。。谁能帮帮我吗?
谢谢。

我认为您的问题不在于scala.Int与java.lang.Integer的关系,而在于选项类型的使用

简短回答:这似乎对我有用 vali:Int=7 新发现框架(“foo”,部分(i),无)

长答覆: scala选项类型是包装器,可能包含也可能不包含其泛型类型的值。其思想是避免Java的空值。 期权可以是None(不包含值)或Some[T](包含值)-None和Some是期权的子类。因此,您只需要将scala Int包装成一个Some,如上面的代码所示。

scala>vali:java.lang.Integer=1
scala> val i: java.lang.Integer = 1
i: Integer = 1

scala> val id: Option[java.lang.Integer] = Some(i)
id: Option[Integer] = Some(1)

scala> id.get.getClass
res9: Class[_ <: Integer] = class java.lang.Integer
i:整数=1 scala>valid:Option[java.lang.Integer]=Some(i) id:Option[Integer]=Some(1) scala>id.get.getClass
res9:Class[\p>Scala使用box作为基本类型,它可以直接传递给Java

在下面的代码中,类型i实际上是
int
,并且
int
可以传递到需要
long
的Random,因为
int
将自动转换为
long

val i = 3
println(i.getClass)
println(new Random(i))
使用
选项[Integer]
选项[Integer]对以下代码进行整型.get
将获取其中的值,类型为
Integer
Integer
不能直接传递到
long
,而我们可以使用
.toLong
将其转换为
long
,该值将自动取消装箱到
long

val oi: Option[Integer] = new Some(3)
println(oi.getClass)

println(new Random(oi.get.toLong))

您只需将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
scala>val n=20
n:Int=20
scala>新整数(n)
res0:Integer=20
scala>res0.getClass

res1:Class[\p>我认为大多数其他答案都涵盖了这一点,你的问题在于Option的使用,而不是scala和java整数之间的区别。你可以用options做很多事情,例如: 鉴于:

  • (丑陋)假设您的选项始终有一个值,只需使用get(
    val i=optionFinteger.get
  • 应用默认值:(
    val i=optionFinteger.getOrElse(0)
  • 您可以将integer选项映射为其他选项(
    val optionOfString=optionOfInteger.map(u.toString)
  • 您可以在一个调用中同时执行最后两个调用(
    val str=optionFinteger.fold(“Nothing”)(\uu.toString)
  • 您还可以将Option视为一个集合的集合,因此您可以使用Option对集合执行的所有操作,包括将其转换为其他类型的集合、折叠等。 在您的案例中,它的一个很好的用途可能是决定是否调用java方法
def myFn(findingFrame:findingFrame)={
findingFrame.in.foreach{i=>javaMethod(i)}
}


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

你发布的代码行令人困惑。Java方法到底是什么?哪一行代码给出了错误?确切的错误消息是什么?case类与它有什么关系?它使用
选项[Integer]
(Scala
选项
和Java
整数
的奇怪混合体)。case类采用
选项[Integer]
,而不是
整数
选项
不是
整数
,因此不能将一个转换为另一个。
val optionOfInteger = Option(5)