创建一个接收类型参数但不是作为参数的方法,就像classOf一样



我有以下代码:

class ServletSpec extends Specification {
    def createServlet[T <: HttpServlet](clazz: Class[T]): T = {
        val instance = clazz.newInstance()
        instance.init()
        instance
    }
} 

这样调用:

spec.createServlet( classOf[DocumentationServlet] )

我如何定义这个方法,以便我可以这样调用它:

spec.createServlet[DocumentationServlet]

Using manifest:

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]()

隐式参数由编译器填充,Manifest包含创建新实例所需的类型信息。有关更多信息,请参阅Scala中的Manifest是什么以及何时需要它?

相关内容

  • 没有找到相关文章

最新更新