Класс-трейт ClassTag.ClassTag
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, который может быть переопределён в подклассе. См. Programming in Scala, Глава 28 для обсуждения и проектирования.
| Параметры значений |
|
|---|---|
| Возвращает | true, если этот экземпляр может быть равен |
| Классы определения | Equals -> ClassManifestDeprecatedApis |
Исходный код
Универсальный метод равенства, определённый в AnyRef.
| Классы определения | Equals -> Any |
|---|
Исходный код
Вычисление значения хэша для объекта.
Алгоритм хэширования по умолчанию зависит от платформы.
Заметьте, что для двух объектов допустимо иметь одинаковые значения хэша (o1.hashCode.equals(o2.hashCode)) но не быть равными (o1.equals(o2) возвращает false). Вырожденная реализация может всегда возвращать 0. Однако требуется, чтобы если два объекта равны (o1.equals(o2) возвращает true) что они имели одинаковые значения хэша (o1.hashCode.equals(o2.hashCode)). Следовательно, при переопределении этого метода убедитесь, что поведение согласовано с методом equals.
| Возвращает | значение хэша для этого объекта. |
|---|---|
| Классы определения | 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.2.0/scala/reflect/ClassTag.html