Создайте метод, который получает параметр типа, но не как параметр, как classOf - PullRequest
3 голосов
/ 29 ноября 2011

У меня есть следующий код:

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]

1 Ответ

5 голосов
/ 29 ноября 2011

Использование манифестов:

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

Неявный параметр заполняется компилятором, а манифест содержит информацию о типе, необходимую для создания нового экземпляра.Для получения дополнительной информации см. Что такое манифест в Scala и когда он вам нужен?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...