ClassTag[T] stores the erased class of a given type
T, accessible via the
field. This is particularly useful for instantiating
Arrays whose element types are unknown
at compile time.
ClassTags are a weaker special case of scala.reflect.api.TypeTags.TypeTags, in that they
wrap only the runtime class of a given type, whereas a
TypeTag contains all static type
information. That is,
ClassTags are constructed from knowing only the top-level class of a
type, without necessarily knowing all of its argument types. This runtime information is enough
scala> def mkArray[T : ClassTag](elems: T*) = Array[T](elems: _*) mkArray: [T](elems: T*)(implicit evidence$1: scala.reflect.ClassTag[T])Array[T] scala> mkArray(42, 13) res0: Array[Int] = Array(42, 13) scala> mkArray("Japan","Brazil","Germany") res1: Array[String] = Array(Japan, Brazil, Germany)
See scala.reflect.api.TypeTags for more examples, or the Reflection Guide: TypeTags for more details.
A ClassTag[T] can serve as an extractor that matches only objects of type T.
The compiler tries to turn unchecked type tests in pattern matches into checked ones
by wrapping a
(_: T) type pattern as
ct(_: T), where
ct is the
Type tests necessary before calling other extractors are treated similarly.
SomeExtractor(...) is turned into
is uncheckable, but we have an instance of