【发布时间】:2015-12-09 13:27:40
【问题描述】:
在下面的scala代码中,NullPointerException在第3个方法调用的入口处被抛出。我检查了字节码。似乎,在f(1, c=2) 中,编译器在f$default$2 的返回值上插入了一个检查转换,它将b 的类型转换为Nothing。但是在f(1) 中,编译器不进行这种转换。为什么?
import scala.reflect.ClassTag
import scala.reflect._
object test {
def f[T : ClassTag](a:T, b:T=null.asInstanceOf[T], c:Int=2)={ print("*"+classTag[T]+"*");println(a, b, c) }
def main(args: Array[String]) {
f(1)
f(1, 2)
f(1, c=3) //Null pointer!! But why f(1) is right?
}
}
【问题讨论】: