Spec-Zone.ru › Scala 3.2

Трейт Manifest.Manifest

Объект-компаньон • Исходный код

трейт Manifest[T] extends ClassTag[T] with Equals

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>)
Суперобъекты
трейт ClassTag[T]
трейт Equals
трейт ClassManifestDeprecatedApis[T]
трейт OptManifest[T]
трейт Serializable
класс Object
трейт Matchable
класс Any
Известные подтипы
класс AnyValManifest[T]

Конкретные методы

Исходник
переопределение def arrayManifest: Manifest[Array[T]]

Классы-определения ClassManifestDeprecatedApis

Исходник
переопределение def canEqual(that: Any): Boolean

Метод, который должен вызываться из каждого хорошо спроектированного метода equals, который может быть переопределён в подклассе. См. Programming in Scala, Chapter 28 для обсуждения и проектирования.

Параметры значений
that

значение, на котором проверяется возможность равенства

Возвращает

true, если этот экземпляр потенциально равен that, в противном случае false

Классы-определения ClassTag -> Equals -> ClassManifestDeprecatedApis

Исходник
переопределение def equals(that: Any): Boolean

Примечание: проверка стирания здесь важна, так как она во много раз быстрее, чем <:<, и исключает большинство сравнений.

Классы-определения ClassTag -> Equals -> Any

Исходник
переопределение def hashCode: Int

Вычисление кода хеширования для объекта.

Алгоритм хеширования по умолчанию зависит от платформы.

Обратите внимание, что для двух объектов допустимо иметь одинаковые коды хеширования (o1.hashCode.equals(o2.hashCode)) , но при этом не быть равными (o1.equals(o2) возвращает false). Вырожденная реализация может всегда возвращать 0. Однако требуется, чтобы если два объекта равны (o1.equals(o2) возвращает true) , у них были одинаковые коды хеширования (o1.hashCode.equals(o2.hashCode)). Поэтому при переопределении этого метода убедитесь, что поведение согласуется с методом equals.

Возвращает

значение кода хеширования для этого объекта.

Классы-определения ClassTag -> Any

Исходник
переопределение def typeArguments: List[Manifest[_]]

Классы-определения ClassManifestDeprecatedApis

Унаследованные методы

Исходник
защищённый def argString: String

Унаследовано от ClassManifestDeprecatedApis

Исходник
защищённый def arrayClass[A](tp: Class[_]): Class[Array[A]]

Унаследовано от ClassManifestDeprecatedApis

Исходник
def newArray(len: Int): Array[T]

Создаёт новый массив с типом элементов T и длиной len.

Унаследовано от ClassTag

Исходник
def runtimeClass: Class[_]

Класс, представляющий тип U , к которому T будет стёр. Обратите внимание, что нет отношения подтипизации между T и U.

Унаследовано от ClassTag

Исходник
переопределение def toString: String

Возвращает строковое представление объекта.

Представление по умолчанию зависит от платформы.

Возвращает

строковое представление объекта.

Классы-определения ClassTag -> Any
Унаследовано от ClassTag

Исходник
def unapply(x: Any): Option[T]

ClassTag[T] может использоваться как экстрактор, который сопоставляет только объекты типа T.

Компилятор пытается преобразовать неконтролируемые проверки типов в шаблонах соответствия в контролируемые, обернув шаблон типа (_: T) в ct(_: T), где ct является экземпляром ClassTag[T]. Проверки типов, необходимые перед вызовом других экстракторов, обрабатываются аналогично. SomeExtractor(...) преобразуется в ct(SomeExtractor(...)), если T в SomeExtractor.unapply(x: T) не проверяется, но у нас есть экземпляр ClassTag[T].

Унаследовано от ClassTag

Исходник
def wrap: ClassTag[Array[T]]

Производит 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API