ClassTag

@nowarn("cat=deprecation&origin=scala\\.reflect\\.ClassManifestDeprecatedApis") @implicitNotFound(msg = "No ClassTag available for ${T}") trait ClassTag[T] extends ClassManifestDeprecatedApis[T] with Equals with Serializable

A ClassTag[T] stores the erased class of a given type T, accessible via the runtimeClass 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 for runtime Array creation.

For example:

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.

Companion
object
Source
ClassTag.scala
trait Equals
trait OptManifest[T]
class Object
trait Matchable
class Any

Value members

Abstract methods

A class representing the type U to which T would be erased. Note that there is no subtyping relationship between T and U.

Concrete methods

override def canEqual(x: Any): Boolean
override def equals(x: Any): Boolean
Definition Classes
Equals -> Any
Source
ClassTag.scala
override def hashCode: Int
Definition Classes
Any
Source
ClassTag.scala
def newArray(len: Int): Array[T]

Produces a new array with element type T and length len

override def toString: String
Definition Classes
Any
Source
ClassTag.scala
def unapply(x: Any): Option[T]

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 ClassTag[T] instance. Type tests necessary before calling other extractors are treated similarly. SomeExtractor(...) is turned into ct(SomeExtractor(...)) if T in SomeExtractor.unapply(x: T) is uncheckable, but we have an instance of ClassTag[T].

def wrap: ClassTag[Array[T]]

Produces a ClassTag that knows how to instantiate an Array[Array[T]]

Deprecated and Inherited methods

@deprecated("use scala.reflect.runtime.universe.TypeTag for subtype checking instead", "2.10.0")
def <:<(that: ClassTag[_]): Boolean

Tests whether the type represented by this manifest is a subtype of the type represented by that manifest, subject to the limitations described in the header.

@deprecated("use scala.reflect.runtime.universe.TypeTag for subtype checking instead", "2.10.0")
def >:>(that: ClassTag[_]): Boolean

Tests whether the type represented by this manifest is a supertype of the type represented by that manifest, subject to the limitations described in the header.

@deprecated("use wrap instead", "2.10.0")
@deprecated("use runtimeClass instead", "2.10.0")
def erasure: Class[_]
@deprecated("use wrap.newArray instead", "2.10.0")
def newArray2(len: Int): Array[Array[T]]
@deprecated("use wrap.wrap.newArray instead", "2.10.0")
def newArray3(len: Int): Array[Array[Array[T]]]
@deprecated("use wrap.wrap.wrap.newArray instead", "2.10.0")
def newArray4(len: Int): Array[Array[Array[Array[T]]]]
@deprecated("use wrap.wrap.wrap.wrap.newArray instead", "2.10.0")
def newArray5(len: Int): Array[Array[Array[Array[Array[T]]]]]
@deprecated("use ArrayBuilder.make(this) instead", "2.10.0")
@deprecated("create WrappedArray directly instead", "2.10.0")
@deprecated("use scala.reflect.runtime.universe.TypeTag to capture type structure instead", "2.10.0")