Spec-Zone.ru › Scala 3.2

Класс-трейт ClassTag.ClassTag

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

трейт 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, который может быть переопределён в подклассе. См. Programming in Scala, Глава 28 для обсуждения и проектирования.

Параметры значений
that

значение, проверяемое на возможное равенство

Возвращает

true, если этот экземпляр может быть равен that, иначе false

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

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

Универсальный метод равенства, определённый в AnyRef.

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

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

Вычисление значения хэша для объекта.

Алгоритм хэширования по умолчанию зависит от платформы.

Заметьте, что для двух объектов допустимо иметь одинаковые значения хэша (o1.hashCode.equals(o2.hashCode)) но не быть равными (o1.equals(o2) возвращает false). Вырожденная реализация может всегда возвращать 0. Однако требуется, чтобы если два объекта равны (o1.equals(o2) возвращает true) что они имели одинаковые значения хэша (o1.hashCode.equals(o2.hashCode)). Следовательно, при переопределении этого метода убедитесь, что поведение согласовано с методом equals.

Возвращает

значение хэша для этого объекта.

Классы определения 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.2.0/scala/reflect/ClassTag.html

Spec-Zone.ru

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