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

发布于 2024-12-18 18:34:34 字数 435 浏览 3 评论 0原文

我有以下代码:

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]

I have the following code:

class ServletSpec extends Specification {

    def createServlet[T <: HttpServlet](clazz: Class[T]): T = {

        val instance = clazz.newInstance()
        instance.init()

        instance

    }

} 

That is called like this:

spec.createServlet( classOf[DocumentationServlet] )

How can I define this method so that I can call it like this:

spec.createServlet[DocumentationServlet]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

星星的軌跡 2024-12-25 18:34:34

使用Manifests:

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

Using Manifests:

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

The implicit parameter is filled in by the compiler, and a Manifest contains the type information required to create a new instance. For more information, see What is a Manifest in Scala and when do you need it?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文