簡體   English   中英

Int vs Integer:類型不匹配,找到:Int,required:String

[英]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"表示字符串連接, aint 因此, 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

目前我不知道為什么會發生錯誤。

ajava.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM