[英]Int vs Integer: type mismatch, found: Int, required: String
我將這些輸入到scala解釋器:
val a : Integer = 1;
val b : Integer = a + 1;
我收到的消息是:
<console>:5: error: type mismatch;
found : Int(1)
required: String
val b : Integer = a +1
^
為什么? 我怎么解決這個問題? 這次我需要整數,因為Java互操作性的原因。
這個問題幾乎是重復的: Scala不能乘以java雙打? - 你也可以看看我的答案 ,因為這個想法很相似。
正如Eastsun已經暗示的那樣,答案是從java.lang.Integer
(基本上是一個盒裝的int
原語)到scala.Int
的隱式轉換 ,它是表示JVM原始整數的Scala方式。
implicit def javaToScalaInt(d: java.lang.Integer) = d.intValue
並且已經實現了互操作性 - 你提供的代碼剪斷應該編譯得很好! 使用scala.Int
需要java.lang.Integer
代碼似乎可以正常工作,因為自動裝箱。 以下是有效的:
def foo(d: java.lang.Integer) = println(d)
val z: scala.Int = 1
foo(z)
另外,正如michaelkebe所說,不要使用Integer
類型 - 這實際上是scala.Predef.Integer
簡寫,因為它已被棄用,並且很可能將在Scala 2.8中刪除。
編輯 :糟糕...忘了回答原因。 您得到的錯誤可能是scala.Predef.Integer
試圖模仿Java的語法糖,其中a + "my String"
表示字符串連接, a
是int
。 因此, scala.Predef.Integer
類型中的+
方法僅執行字符串連接(期望String
類型)並且不添加自然整數。
- Flaviu Cipcigan
Welcome to Scala version 2.7.3.final (Java HotSpot(TM) Client VM, Java 1.6.0_16).
Type in expressions to have them evaluated.
Type :help for more information.
scala> implicit def javaIntToScala(n: java.lang.Integer) = n.intValue
javaIntToScala: (java.lang.Integer)Int
scala> val a: java.lang.Integer = 1
a: java.lang.Integer = 1
scala> val b: java.lang.Integer = a + 1
b: java.lang.Integer = 2
首先,您應該使用java.lang.Integer
而不是Integer
。
目前我不知道為什么會發生錯誤。
a
是java.lang.Integer
一個實例,此類型沒有名為+
的方法。 此外,沒有隱式轉換為Int
。
要解決此問題,您可以嘗試這樣做:
scala> val a: java.lang.Integer = 1 a: java.lang.Integer = 1 scala> val b: java.lang.Integer = a.intValue + 1 b: java.lang.Integer = 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.