Этот аромат должен сделать свое дело:
trait SomeTrait[A] {
def foo(implicit ev: Manifest[A]) = {
callApi(ev.erasure)
}
}
update В какой-то момент манифест должен быть введен с помощью параметра метода. Конструктор был бы хорошим выбором, если бы черты могли их иметь.
На самом деле, они могут! Признак имеет конструктор, с которым он смешивается, поэтому, если вы укажете абстрактный манифест, производные классы должны определить ...
trait SomeTrait {
def ev: Manifest[_] //abstract
def foo = println(ev.erasure)
}
//this `ev` provides the implementation, note that it MUST be a val, or var
class Concrete[T](implicit val ev: Manifest[T]) extends SomeTrait
И снова все хорошо.