查看 scala 测试中“拦截”的方法签名:
def intercept[T <: AnyRef](f: => Any)(implicit manifest: Manifest[T]): T = {
不知道怎么[T <: AnyRef]
用?这看起来像一个参数类型,但为什么它包含在尖括号 - [] 中?
这是完整的方法:
def intercept[T <: AnyRef](f: => Any)(implicit manifest: Manifest[T]): T = {
val clazz = manifest.erasure.asInstanceOf[Class[T]]
val caught = try {
f
None
}
catch {
case u: Throwable => {
if (!clazz.isAssignableFrom(u.getClass)) {
val s = Resources("wrongException", clazz.getName, u.getClass.getName)
throw newAssertionFailedException(Some(s), Some(u), 4)
}
else {
Some(u)
}
}
}
caught match {
case None =>
val message = Resources("exceptionExpected", clazz.getName)
throw newAssertionFailedException(Some(message), None, 4)
case Some(e) => e.asInstanceOf[T] // I know this cast will succeed, becuase iSAssignableFrom succeeded above
}
}