代码之家  ›  专栏  ›  技术社区  ›  pcjuzer

Int与Integer:类型不匹配,找到:Int,必需:String

  •  14
  • pcjuzer  · 技术社区  · 16 年前

    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互操作性的原因,这次我需要整数。

    3 回复  |  直到 16 年前
        1
  •  19
  •   Community Mohan Dere    9 年前

    这个问题几乎是重复的: Scala can't multiply java Doubles? -你可以看看 my answer 同样,因为想法是相似的。

    如 Eastsun 已经暗示,答案是 隐式转换 从a java.lang.Integer (基本上是一个盒子 int 原始)到a scala.Int ,这是表示JVM原始整数的Scala方式。

    implicit def javaToScalaInt(d: java.lang.Integer) = d.intValue
    

    互操作性已经实现——你给出的代码应该可以很好地编译!以及使用 scala。整数 哪里 java.lang.Integer 由于自动装箱,需要的似乎工作得很好。因此,以下工作:

    def foo(d: java.lang.Integer) = println(d)
    val z: scala.Int = 1
    foo(z)
    

    此外,如 michaelkebe 说,不要使用 Integer type-实际上是简写 scala.Predef.Integer 因为它已被弃用,很可能会在Scala 2.8中被删除。

    编辑 :哎呀。..忘了回答原因。你得到的错误可能是 scala。预定义。整数 试图模仿Java的语法糖 a + "my String" 表示字符串连接, a 是一个 整数 因此 + 方法在 scala。预定义。整数 type只进行字符串连接(需要 String 类型)并且没有自然整数加法。

    --弗拉维奥·西普西根

        2
  •  2
  •   oxbow_lakes    16 年前
    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
    
        3
  •  0
  •   michael.kebe    16 年前

    首先,你应该使用 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
    
    推荐文章