Manifest[T] is an opaque descriptor for type T. Its supported use
is to give access to the erasure of the type as a
Class instance, as
is necessary for the creation of native
Arrays if the class is not
known at compile time.
The type-relation operators
=:= should be considered
approximations only, as there are numerous aspects of type conformance
which are not yet adequately represented in manifests.
def arr[T] = new Array[T](0) // does not compile def arr[T](implicit m: Manifest[T]) = new Array[T](0) // compiles def arr[T: Manifest] = new Array[T](0) // shorthand for the preceding // Methods manifest and optManifest are in [[scala.Predef]]. def isApproxSubType[T: Manifest, U: Manifest] = manifest[T] <:< manifest[U] isApproxSubType[List[String], List[AnyRef]] // true isApproxSubType[List[String], List[Int]] // false def methods[T: Manifest] = manifest[T].runtimeClass.getMethods def retType[T: Manifest](name: String) = methods[T] find (_.getName == name) map (_.getGenericReturnType) retType[Map[_, _]]("values") // Some(scala.collection.Iterable)
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