gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:54:45 27 4
gpt4 key购买 nike

我有以下代码:

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/

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