Трейт scala.reflect.ClassTag
@nowarn("cat=deprecation&origin=scala\\.reflect\\.ClassManifestDeprecatedApis") @implicitNotFound(msg = "No ClassTag available for ${T}")
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 для получения более подробной информации.
| Суператрибуты | |
|---|---|
| Известные подтипы |
Абстрактные методы
Исходный код
def runtimeClass: Class[_]
Класс, представляющий тип U, к которому T был бы стёрт. Обратите внимание, что нет отношения подтипизации между T и U.
Конкретные методы
Исходный код
| Классы определений | Equals -> ClassManifestDeprecatedApis |
|---|
Исходный код
| Классы определений | Equals -> Any |
|---|
Исходный код
| Классы определений | Any |
|---|
Исходный код
Создаёт новый массив с типом элементов T и длиной len
Исходный код
| Классы определений | Any |
|---|
Исходный код
ClassTag[T] может служить извлекателем, который соответствует только объектам типа T.
Компилятор пытается преобразовать неконтролируемые проверки типов в образцах совпадений в контролируемые, обернув шаблон типа (_: T) как ct(_: T), где ct — это экземпляр ClassTag[T]. Аналогичным образом обрабатываются проверки типов, необходимые перед вызовом других извлекателей. SomeExtractor(...) преобразуется в ct(SomeExtractor(...)), если T в SomeExtractor.unapply(x: T) не поддаётся проверке, но у нас есть экземпляр ClassTag[T].
Исходный код
Создаёт ClassTag, который знает, как создать экземпляр Array[Array[T]]
Наследованные методы
Исходный код
| Наследован из | ClassManifestDeprecatedApis |
|---|
Исходный код
| Наследован из | 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