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

标签 scala reflection

我有以下代码:

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]

最佳答案

使用 list :

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包含创建新实例所需的类型信息。有关详细信息,请参阅 What is a Manifest in Scala and when do you need it?

关于scala - 创建一个接收类型参数但不作为参数的方法,就像 classOf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8316768/

相关文章:

从另一个类调用 protected 方法的测试方法

java - 使用反射读取对象的所有字段及其内容

scala - 在 Scala 中子类化和输入

scala - 通过插入 () 来调整参数列表已被弃用

java - 是否可以在 Scala 中使用 Java 8 风格的方法引用?

scala - 如何在 slick 中使用共享 session 进行多个数据库操作?

c# - 如何使用反射设置类型为 List<CustomClass> 的属性

scala - 如何对 ArrayBuffer[Double] 进行排序并保存索引

python - 在 Python 中使用参数调用对象的方法

c# - 使用反射动态调用 WCF 服务