2016-11-15 425 views
2

我對scala很感興趣,並且一起使用scala和Java。如何將一個Scala Int轉換爲一個java Integer?

我想通過一個接口一個整數(java.long.Integer)的方法將一個斯卡拉Int傳入。由於它們的類型不同,編譯器會提供一個錯誤。

/* 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中],但這並不工作,要麼..

我不知道如何解決這個..有人可以幫我嗎? 謝謝。

+0

您發佈的代碼行很混亂。 Java方法究竟是什麼?什麼行代碼確實給你一個錯誤?什麼是確切的錯誤信息?案例分類與它有什麼關係?它需要一個'Option [Integer]'(一個Scala'Option'和一個Java'Integer'的奇怪混合體)。 – Jesper

+0

案例類採用「Option [Integer]」而不是「Integer」。一個'Option'不是一個'Integer',所以你不能把一個投向另一個。 – Jesper

回答

1

我認爲大多數其他答案覆蓋它,你的問題是使用選項,而不是與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看作一個集合,因此您可以對Options執行的集合進行所有漂亮的事情,包括將其轉換爲其他類型的集合,摺疊等。 在其中的一個很好的用法你的情況,可能是決定調用或不調用java方法。

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

在上面你可以使用地圖,或匹配/箱代替。

2

我認爲你的問題不是關於scala.Int與java.lang.Integer有關,而是使用Option類型。

簡短的回答:這似乎爲我 VAL工作我:INT = 7 新findingFrame( 「富」,有些(我),無)

龍答: 斯卡拉選項類型的包裝是可能包含或不包含其泛型類型的值。這個想法是爲了避免Java的空值。 一個選項可以是None(不包含值)或Some [T](包含值) - None和一些是Option的子類。所以你只需要在上面的代碼中將你的Scala Int包裝到Some中。

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 
2

斯卡拉使用基本類型中,它可以直接傳遞到Java。

在下面的代碼,I型實際上是int,而int可以傳遞給隨機這就需要long因爲int會自動轉換爲long

val i = 3 
println(i.getClass) 
println(new Random(i)) 

詮釋下面的代碼,使用Option[Integer]Option[Integer].get會得到其內部是類型Integer值。並且Integer不能直接傳遞給long,而我們可以使用.toLong將其轉換爲Long,它會自動取消裝箱到long

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

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

您需要做的就是將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 
相關問題