Трейт Manifest.Manifest
A Manifest[T] — это непрозрачное описание типа T. Его поддерживаемое использование заключается в предоставлении доступа к стиранию типа в качестве Class экземпляра, что необходимо для создания нативных Arrays в случае, если класс неизвестен во время компиляции.
Операторы отношений типов <:< и =:= следует рассматривать только как приближения, поскольку существует множество аспектов соответствия типов, которые пока недостаточно адекватно представлены в манифестах.
Примеры использования:
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>)
| Суперобъекты | |
|---|---|
| Известные подтипы |
Конкретные методы
Исходник
| Классы-определения | ClassManifestDeprecatedApis |
|---|
Исходник
Метод, который должен вызываться из каждого хорошо спроектированного метода equals, который может быть переопределён в подклассе. См. Programming in Scala, Chapter 28 для обсуждения и проектирования.
| Параметры значений |
|
|---|---|
| Возвращает | true, если этот экземпляр потенциально равен |
| Классы-определения | ClassTag -> Equals -> ClassManifestDeprecatedApis |
Исходник
Примечание: проверка стирания здесь важна, так как она во много раз быстрее, чем <:<, и исключает большинство сравнений.
| Классы-определения | ClassTag -> Equals -> Any |
|---|
Исходник
Вычисление кода хеширования для объекта.
Алгоритм хеширования по умолчанию зависит от платформы.
Обратите внимание, что для двух объектов допустимо иметь одинаковые коды хеширования (o1.hashCode.equals(o2.hashCode)) , но при этом не быть равными (o1.equals(o2) возвращает false). Вырожденная реализация может всегда возвращать 0. Однако требуется, чтобы если два объекта равны (o1.equals(o2) возвращает true) , у них были одинаковые коды хеширования (o1.hashCode.equals(o2.hashCode)). Поэтому при переопределении этого метода убедитесь, что поведение согласуется с методом equals.
| Возвращает | значение кода хеширования для этого объекта. |
|---|---|
| Классы-определения | ClassTag -> Any |
Исходник
| Классы-определения | ClassManifestDeprecatedApis |
|---|
Унаследованные методы
Исходник
| Унаследовано от | ClassManifestDeprecatedApis |
|---|
Исходник
| Унаследовано от | ClassManifestDeprecatedApis |
|---|
Исходник
Создаёт новый массив с типом элементов T и длиной len.
| Унаследовано от | ClassTag |
|---|
Исходник
def runtimeClass: Class[_]
Класс, представляющий тип U , к которому T будет стёр. Обратите внимание, что нет отношения подтипизации между T и U.
| Унаследовано от | ClassTag |
|---|
Исходник
Возвращает строковое представление объекта.
Представление по умолчанию зависит от платформы.
| Возвращает | строковое представление объекта. |
|---|---|
| Классы-определения | ClassTag -> Any |
| Унаследовано от | ClassTag |
Исходник
ClassTag[T] может использоваться как экстрактор, который сопоставляет только объекты типа T.
Компилятор пытается преобразовать неконтролируемые проверки типов в шаблонах соответствия в контролируемые, обернув шаблон типа (_: T) в ct(_: T), где ct является экземпляром ClassTag[T]. Проверки типов, необходимые перед вызовом других экстракторов, обрабатываются аналогично. SomeExtractor(...) преобразуется в ct(SomeExtractor(...)), если T в SomeExtractor.unapply(x: T) не проверяется, но у нас есть экземпляр ClassTag[T].
| Унаследовано от | ClassTag |
|---|
Исходник
Производит ClassTag, который знает, как создать экземпляр Array[Array[T]].
| Унаследовано от | ClassTag |
|---|
© 2002-2022 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://scala-lang.org/api/3.2.0/scala/reflect/Manifest.html