gpt4 book ai didi

scala - 这是参数类型吗 - [T < : AnyRef]

转载 作者:行者123 更新时间:2023-12-01 10:21:25 26 4
gpt4 key购买 nike

查看 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
}
}

最佳答案

这种语言构造称为类型参数化,您可以在此处阅读更多相关信息:

http://www.artima.com/pins1ed/type-parameterization.html

在这种情况下,方法也可以声明类型参数。如果您已经有一些 Java 背景,那么这里是非常相似的 Java 等价物:

public <T extends Object> T intercept(Runnable f) {
// ...
}

关于scala - 这是参数类型吗 - [T < : AnyRef],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13931516/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com