Spec-Zone.ru › Scala 3.1

Трейт scala.reflect.Manifest

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

@nowarn("cat=deprecation&origin=scala\\.reflect\\.ClassManifest(DeprecatedApis.*)?") @implicitNotFound(msg = "Нет доступного Manifest для ${T}.")
трейт 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]

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

Исходный код
переопределённый метод arrayManifest: Manifest[Array[T]]

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

Исходный код
переопределённый метод canEqual(that: Any): Boolean

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

Исходный код
переопределённый метод equals(that: Any): Boolean

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

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

Исходный код
переопределённый метод hashCode: Int

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

Исходный код
переопределённый метод typeArguments: List[Manifest[_]]

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

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

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

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

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

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

Исходный код
метод newArray(len: Int): Array[T]

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

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

Исходный код
метод runtimeClass: Class[_]

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

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

Исходный код
переопределённый метод toString: String

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

Исходный код
метод 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

Исходный код
метод 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.1.1/scala/reflect/Manifest.html

Spec-Zone.ru

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