A 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 <:<
and =:=
should be considered
approximations only, as there are numerous aspects of type conformance
which are not yet adequately represented in manifests.
Example usages:
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<B>)
- Companion:
- object
- Source:
- Manifest.scala
Value members
Concrete methods
A method that should be called from every well-designed equals method that is open to be overridden in a subclass.
A method that should be called from every well-designed equals method that is open to be overridden in a subclass. See Programming in Scala, Chapter 28 for discussion and design.
- Value parameters:
- that
the value being probed for possible equality
- Returns:
true if this instance can possibly equal
that
, otherwise false- Definition Classes
- Source:
- Manifest.scala
Note: testing for erasure here is important, as it is many times faster than <:< and rules out most comparisons.
Note: testing for erasure here is important, as it is many times faster than <:< and rules out most comparisons.
- Definition Classes
- Source:
- Manifest.scala
Calculate a hash code value for the object.
Calculate a hash code value for the object.
The default hashing algorithm is platform dependent.
Note that it is allowed for two objects to have identical hash codes (o1.hashCode.equals(o2.hashCode)
) yet
not be equal (o1.equals(o2)
returns false
). A degenerate implementation could always return 0
.
However, it is required that if two objects are equal (o1.equals(o2)
returns true
) that they have
identical hash codes (o1.hashCode.equals(o2.hashCode)
). Therefore, when overriding this method, be sure
to verify that the behavior is consistent with the equals
method.
- Returns:
the hash code value for this object.
- Definition Classes
- Source:
- Manifest.scala
Inherited methods
Produces a new array with element type T
and length len
Produces a new array with element type T
and length len
- Inherited from:
- ClassTag
- Source:
- ClassTag.scala
A class representing the type U
to which T
would be erased.
A class representing the type U
to which T
would be erased.
Note that there is no subtyping relationship between T
and U
.
- Inherited from:
- ClassTag
- Source:
- ClassTag.scala
Returns a string representation of the object.
Returns a string representation of the object.
The default representation is platform dependent.
- Returns:
a string representation of the object.
- Definition Classes
- Inherited from:
- ClassTag
- Source:
- ClassTag.scala
A ClassTag[T] can serve as an extractor that matches only objects of type 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]
.
- Inherited from:
- ClassTag
- Source:
- ClassTag.scala
Produces a ClassTag
that knows how to instantiate an Array[Array[T]]
Produces a ClassTag
that knows how to instantiate an Array[Array[T]]
- Inherited from:
- ClassTag
- Source:
- ClassTag.scala
Deprecated and Inherited methods
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.
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
- Inherited from:
- ClassManifestDeprecatedApis
- Source:
- ClassManifestDeprecatedApis.scala
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.
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
- Inherited from:
- ClassManifestDeprecatedApis
- Source:
- ClassManifestDeprecatedApis.scala