Как получить общий параметр в Scala - PullRequest
2 голосов
/ 02 февраля 2012

Я хотел бы иметь возможность выполнить следующий код:

abstract class A[T <: AnyRef]{
  def whichClass: Class[_] = classOf[T]
}

case class X()

object B extends A[X]

object Main{
  def main(args: Array[String]){
    B.whichClass //should return classOf[X]
  }
}

Очевидно, что в этой форме это не работает, поскольку classOf[T] может быть назначено только классу, а не типу. А получил ошибку:

error: class type required but T found
def whichClass: Class[_] = classOf[T]

Есть идеи, как решить эту проблему по-другому?

1 Ответ

9 голосов
/ 02 февраля 2012

Использование ClassManifest .

abstract class A[T <: AnyRef : ClassManifest] {
  def whichClass = classManifest[T].erasure
}

case class X()

object B extends A[X]

object Main{
  def main(args: Array[String]): Unit = {
    println(B.whichClass) // prints 'class X'
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...