Для этого есть обходной путь. Вы можете использовать Manifest
тип класса. Используя его, компилятор Scala гарантирует, что информация о классе будет доступна во время выполнения. Manifest
имеет erasure
свойство - это объект класса для универсального типа.
Вы можете использовать его для параметров типа метода, таких как:
def printClass[T](implicit ev: Manifest[T]) =
println(ev.erasure.getSimpleName)
или упрощенный:
def printClass1[T: Manifest] =
println(manifest[T].erasure.getSimpleName)
Вы также можете использовать его для классов или абстрактных классов:
class Printer[T: Manifest] {
def printName = println(manifest[T].erasure.getSimpleName)
}
К сожалению, вы не можете использовать его для черт.
Редактировать: В качестве обходного пути вы можете определить черту следующим образом:
trait Printer[T] {
def printName(implicit ev: Manifest[T]) =
println(ev.erasure.getSimpleName)
}