为什么这不打字?

时间:2015-02-13 17:19:47

标签: scala

为什么以下代码无法输入check:

var a = Map.empty[String, Integer]
var b: Integer = a.getOrElse("", 0)
b += 1
b = b + 1
val c: Integer = a.getOrElse("", 0) + 1

前四行很好,但最后一行失败,出现“Type mismatch:expected String actual Int”。当然,这与2号线和2号线的作用相同。 4合并?

1 个答案:

答案 0 :(得分:4)

尝试使用Int代替Integer

var a = Map.empty[String, Int]
var b: Int = a.getOrElse("", 0)
b += 1
b = b + 1
val c: Int = a.getOrElse("", 0) + 1

IntInteger在Scala中的类型不同。来自this帖子:

  

Integer只是java.lang.Integer的别名。 Int是具有额外功能的Scala整数。

所以,当你a.getOrElse("", 0)时,返回类型是IntegerInt的常见超类型,即Any。然后你尝试添加to an Any`,这不起作用!