我有以下代码:
class ServletSpec extends Specification {
def createServlet[T <: HttpServlet](clazz: Class[T]): T = {
val instance = clazz.newInstance()
instance.init()
instance
}
}
Run Code Online (Sandbox Code Playgroud)
这被称为:
spec.createServlet( classOf[DocumentationServlet] )
Run Code Online (Sandbox Code Playgroud)
如何定义此方法以便我可以像这样调用它:
spec.createServlet[DocumentationServlet]
Run Code Online (Sandbox Code Playgroud)
使用清单:
class ServletSpec extends Specification {
def createServlet[T <: HttpServlet]()(implicit manifest: Manifest[T]) = {
val instance = manifest.erasure.newInstance().asInstanceOf[T]
instance.init()
instance
}
}
new ServletSpec().createServlet[DocumentationServlet]()
Run Code Online (Sandbox Code Playgroud)
隐式参数由编译器填充,Manifest包含创建新实例所需的类型信息.有关更多信息,请参阅Scala中的什么是Manifest以及何时需要它?
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |