Spec-Zone.ru › Scala 2.12 Library

Пакет scala.reflect

пакет reflect

Источник
package.scala
Линейные надтипы

Члены типа

абстрактный класс AnyValManifest[T <: AnyVal] extends Manifest[T] с Equals

Аннотации
@SerialVersionUID()

тракт ClassTag[T] extends ClassManifestDeprecatedApis[T] с Equals с Serializable

A ClassTag[T] хранит стёртый класс заданного типа T, доступный через поле runtimeClass. Это особенно полезно для создания экземпляров Array с типами элементов, неизвестными на этапе компиляции.

ClassTag — это более слабое частное случая scala.reflect.api.TypeTags#TypeTag, так как они оборачивают только класс времени выполнения заданного типа, тогда как TypeTag содержит всю статическую информацию о типе. То есть ClassTag строятся, зная только верхний класс типа, не обязательно зная все его аргументы типа. Эта информация времени выполнения достаточна для создания экземпляров Array во время выполнения.

Например:

scala> def mkArray[T : ClassTag](elems: T*) = Array[T](elems: _*)
mkArray: [T](elems: T*)(implicit evidence$1: scala.reflect.ClassTag[T])Array[T]

scala> mkArray(42, 13)
res0: Array[Int] = Array(42, 13)

scala> mkArray("Japan","Brazil","Germany")
res1: Array[String] = Array(Japan, Brazil, Germany)

См. scala.reflect.api.TypeTags для получения дополнительных примеров или руководство по отражению: TypeTags, чтобы узнать больше подробностей.

Аннотации
@implicitNotFound( msg = "No ClassTag available for ${T}" )

тракт Manifest[T] extends ClassManifest[T] с Equals

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, classManifest, 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: ClassManifest] = classManifest[T].erasure.getMethods
def retType[T: ClassManifest](name: String) =
  methods[T] find (_.getName == name) map (_.getGenericReturnType)

retType[Map[_, _]]("values")  // Some(scala.collection.Iterable<B>)
Аннотации
@implicitNotFound( msg = "No Manifest available for ${T}." )

тракт OptManifest[+T] extends Serializable

OptManifest[T] — это необязательный scala.reflect.Manifest.

Он либо Manifest , либо значение NoManifest.

тип ClassManifest[T] = ClassTag[T]

ClassManifest[T] — это непрозрачный дескриптор типа T. Он используется компилятором для сохранения информации, необходимой для создания экземпляров Arrays в тех случаях, когда тип элемента неизвестен на этапе компиляции.

Операторы отношений типов стремятся представить более точную картину, чем можно получить с помощью стёртых типов, но нельзя полагаться на них для получения правильных ответов. В частности, они, скорее всего, будут неправильными, когда речь идёт о вариативности или когда подтип имеет другое количество аргументов типа, чем супертип.

Аннотации
@deprecated @implicitNotFound( msg = ... )
Устаревшее

(С версии 2.10.0) используйте scala.reflect.ClassTag вместо этого

тракт ClassManifestDeprecatedApis[T] extends OptManifest[T]

Аннотации
@deprecated
Устаревшее

(С версии 2.10.0) используйте scala.reflect.ClassTag вместо этого

Значения членов

val Manifest: ManifestFactory.type

Объект Manifest определяет методы фабрики для манифестов. Он предназначен для использования компилятором и не должен использоваться в клиентском коде.

def classTag[T](implicit ctag: ClassTag[T]): ClassTag[T]

def ensureAccessible[T <: AccessibleObject](m: T): T

Делает объект Java reflection доступным, если он еще не доступен и это возможно. Если при попытке возникает исключение SecurityException, оно перехватывается и отбрасывается.

object ClassManifestFactory

ClassManifestFactory определяет методы фабрики для манифестов. Он предназначен для использования компилятором и не должен использоваться в клиентском коде.

В отличие от ClassManifest, эта фабрика не аннотирована предупреждением о устаревании. Это делается для предотвращения лавины предупреждений об устаревании в коде, который вызывает методы с манифестами.

В идеальном мире мы бы просто удалили аннотацию @deprecated из ClassManifest объекта, а затем удалили его в версии 2.11. Ведь этот объект явно помечен как внутренний, так что никто не должен его использовать. Однако многие существующие библиотеки игнорировали Scaladoc, который поставляется с ClassManifest, поэтому нам нужно как-то подтолкнуть их к миграции до удаления чего-либо без предупреждения. Поэтому мы приняли это решение как меньшее из зол.

object ClassTag extends Serializable

object ManifestFactory

ManifestFactory определяет методы фабрики для манифестов. Он предназначен для использования компилятором и не должен использоваться в клиентском коде.

В отличие от Manifest, эта фабрика не аннотирована предупреждением о устаревании. Это делается для предотвращения лавины предупреждений об устаревании в коде, который вызывает методы с манифестами. Почему так сложно? Прочитайте комментарии к ClassManifestFactory.

object NameTransformer

Предоставляет функции для кодирования и декодирования символических имен Scala. Также предоставляет некоторые константы.

object NoManifest extends OptManifest[Nothing] with Serializable

© 2002-2019 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://www.scala-lang.org/api/2.12.9/scala/reflect/index.html

Spec-Zone.ru

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