任何人都可以解释为什么下面的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 ×1