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

Mau*_*res 3 reflection scala

我有以下代码:

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)

Mat*_*ell 5

使用清单:

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以及何时需要它?