小编Jan*_*Jan的帖子

从Scala方法返回AnyVal

任何人都可以解释为什么下面的Scala代码片段:

def convertRefToVal(obj: Any): Int = {
  if (obj.isInstanceOf[java.lang.Integer]) obj.asInstanceOf[Int]
  else -1
}

convertRefToVal(42).getClass()
Run Code Online (Sandbox Code Playgroud)

打印java.lang.Class[Int] = int,而这:

def convertRefToVal(obj: Any): AnyVal = {
  if (obj.isInstanceOf[java.lang.Integer]) obj.asInstanceOf[Int]
  else -1
}

convertRefToVal(42).getClass()
Run Code Online (Sandbox Code Playgroud)

生产java.lang.Class[_] = class java.lang.Integer

除了返回类型(Int与AnyVal)之外,这些方法是相同的.

所以第一个例子返回一个Int值类型,而在第二个例子中,我得到一个java.lang.Integer引用类型作为结果.它看起来像自动装箱正在发生,但我不希望这看到第二个版本指定AnyVal作为其返回类型?

(我正在使用Scala 2.10.2)

scala

5
推荐指数
1
解决办法
1187
查看次数

标签 统计

scala ×1