Spec-Zone.ru › Scala 3.1

Трейт scala.reflect.ClassTag

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

@nowarn("cat=deprecation&origin=scala\\.reflect\\.ClassManifestDeprecatedApis") @implicitNotFound(msg = "No ClassTag available for ${T}")
трейт ClassTag[T] extends ClassManifestDeprecatedApis[T] with Equals with Serializable

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

ClassTag — это более слабый частный случай типа scala.reflect.api.TypeTags.TypeTags, поскольку он оборачивает только класс во время выполнения заданного типа, тогда как 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 TypeTags для получения более подробной информации.

Суператрибуты
трейт Equals
трейт ClassManifestDeprecatedApis[T]
трейт OptManifest[T]
трейт Serializable
класс Object
трейт Matchable
класс Any
Известные подтипы
трейт Manifest[T]
класс AnyValManifest[T]

Абстрактные методы

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

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

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

Исходный код
override def canEqual(x: Any): Boolean

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

Исходный код
override def equals(x: Any): Boolean

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

Исходный код
override def hashCode: Int

Классы определений Any

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

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

Исходный код
override def toString: String

Классы определений Any

Исходный код
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].

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

Создаёт ClassTag, который знает, как создать экземпляр Array[Array[T]]

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

Исходный код
protected def argString: String

Наследован из ClassManifestDeprecatedApis

Исходный код
protected def arrayClass[A](tp: Class[_]): Class[Array[A]]

Наследован из ClassManifestDeprecatedApis

© 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/ClassTag.html

Spec-Zone.ru

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