如何将scala Int转换为java整数?
我是scala的新手,并与scala和Java一起工作 我试图将scala Int传递给一个接受整数(java.long.Integer)的方法。由于它们的类型不同,编译器会给出一个错误如何将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,
/* 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)