Тракт scala.reflect.api.Types
тракт Types extends AnyRef
Члены типов
abstract тип AnnotatedType >: Null <: Universe.AnnotatedTypeApi с Universe.Type
тракт AnnotatedTypeApi extends Universe.TypeApi
API, поддерживаемый всеми аннотированными типами. Основным источником информации о типах является страница scala.reflect.api.Types.
abstract класс AnnotatedTypeExtractor extends AnyRef
Класс-экстрактор для создания и сопоставления с образцом с синтаксисом AnnotatedType(annotations, underlying). Здесь annotations — аннотации, которые прикреплены к базовому типу underlying. selfSym — символ, представляющий собой сам аннотированный тип.
abstract тип BoundedWildcardType >: Null <: Universe.BoundedWildcardTypeApi с Universe.Type
BoundedWildcardTypes, используемые только во время вывода типов, создаются в двух местах:
-
Если ожидаемый тип выражения — экзистенциальный тип, его скрытые символы заменяются ограниченными универсальными символами. 2. Когда ищется неявное преобразование, частично основанное на имени метода в типе преобразуемого объекта, создается тип HasMethodMatching: MethodType с параметрами, типизированными как BoundedWildcardTypes.
тракт BoundedWildcardTypeApi extends Universe.TypeApi
API, поддерживаемый всеми этими типами. Основным источником информации о типах является страница scala.reflect.api.Types.
abstract класс BoundedWildcardTypeExtractor extends AnyRef
abstract тип ClassInfoType >: Null <: Universe.ClassInfoTypeApi с Universe.CompoundType
Подпись типа ClassInfo используется для определения родительских типов и объявлений классов, трактов и объектов. Если класс, тракт или объект C объявлен так
C extends P_1 with ... with P_m { D_1; ...; D_n}
его тип ClassInfo имеет следующий вид:
ClassInfo(List(P_1, ..., P_m), Scope(D_1, ..., D_n), C)
тракт ClassInfoTypeApi extends Universe.TypeApi
API, поддерживаемый всеми типами информации о классах. Основным источником информации о типах является страница scala.reflect.api.Types.
abstract класс ClassInfoTypeExtractor extends AnyRef
abstract тип CompoundType >: Null <: Universe.CompoundTypeApi с Universe.Type
тракт CompoundTypeApi extends AnyRef
Не имеет специальных методов. Существует для обеспечения сохранённой идентичности CompoundType.
abstract тип ConstantType >: Null <: Universe.ConstantTypeApi с Universe.SingletonType
Тип ConstantType не может быть выражен в пользовательских программах; он выводится как тип константы. Вот некоторые константы с их типами и внутренним строковым представлением:
1 ConstantType(Constant(1)) Int(1)
"abc" ConstantType(Constant("abc")) String("abc")
ConstantTypes обозначают значения, которые могут быть безопасно сложены во время проверки типов. Операция deconst возвращает эквивалентный тип, который не будет скомпилирован как константа.
тракт ConstantTypeApi extends Universe.TypeApi
API, поддерживаемый всеми типами констант. Основным источником информации о типах является страница scala.reflect.api.Types.
abstract класс ConstantTypeExtractor extends AnyRef
абстрактный тип ExistentialType >: Null <: Universe.ExistentialTypeApi с Universe.Type
тракт ExistentialTypeApi extends Universe.TypeApi
API, поддерживаемый всеми экзистенциальными типами. Основным источником информации о типах является страница scala.reflect.api.Types.
абстрактный класс ExistentialTypeExtractor extends AnyRef
Класс-экстрактор для создания и сопоставления с шаблоном с синтаксисом ExistentialType(quantified, underlying). Здесь quantified — это переменные типа, связанные экзистенциальным типом, а underlying — это тип, квантифицированный экзистенциально.
абстрактный тип MethodType >: Null <: Universe.MethodTypeApi с Universe.Type
тракт MethodTypeApi extends Universe.TypeApi
API, поддерживаемый всеми типами методов. Основным источником информации о типах является страница scala.reflect.api.Types.
абстрактный класс MethodTypeExtractor extends AnyRef
Класс-экстрактор для создания и сопоставления с шаблоном с синтаксисом MethodType(params, restpe). Здесь params — это потенциально пустой список символов параметров метода, а restpe — тип результата метода. Если метод является каррированным, restpe будет другим MethodType. Примечание: MethodType(Nil, Int) будет типом метода, определённого с пустым списком параметров.
def f(): Int
Если метод полностью без параметров, как в
def f: Int
его тип — NullaryMethodType.
абстрактный тип NullaryMethodType >: Null <: Universe.NullaryMethodTypeApi с Universe.Type
тракт NullaryMethodTypeApi extends Universe.TypeApi
API, поддерживаемый всеми типами методов без параметров. Основным источником информации о типах является страница scala.reflect.api.Types.
абстрактный класс NullaryMethodTypeExtractor extends AnyRef
Класс-экстрактор для создания и сопоставления с шаблоном с синтаксисом NullaryMethodType(resultType). Здесь resultType — тип результата метода без параметров.
абстрактный тип PolyType >: Null <: Universe.PolyTypeApi с Universe.Type
тракт PolyTypeApi extends Universe.TypeApi
API, поддерживаемый всеми полиморфными типами. Основным источником информации о типах является страница scala.reflect.api.Types.
абстрактный класс PolyTypeExtractor extends AnyRef
Класс-экстрактор для создания и сопоставления с шаблоном с синтаксисом PolyType(typeParams, resultType). Здесь typeParams — это параметры типа метода, а resultType — подпись типа, следующая за параметрами типа.
абстрактный тип RefinedType >: Null <: Universe.RefinedTypeApi с Universe.CompoundType
Тип RefinedType определяет типы любого из форм слева, со своими представлениями RefinedType справа.
P_1 with ... with P_m { D_1; ...; D_n} RefinedType(List(P_1, ..., P_m), Scope(D_1, ..., D_n))
P_1 with ... with P_m RefinedType(List(P_1, ..., P_m), Scope())
{ D_1; ...; D_n} RefinedType(List(AnyRef), Scope(D_1, ..., D_n))
тракт RefinedTypeApi extends Universe.TypeApi
API, поддерживаемый всеми уточнёнными типами. Основным источником информации о типах является страница scala.reflect.api.Types.
abstract class RefinedTypeExtractor extends AnyRef
abstract type SingleType >: Null <: Universe.SingleTypeApi with Universe.SingletonType
Тип SingleType описывает типы, представленные слева, с их представлениями TypeRef справа.
(T # x).type SingleType(T, x) p.x.type SingleType(p.type, x) x.type SingleType(NoPrefix, x)
trait SingleTypeApi extends Universe.TypeApi
API, поддерживаемый всеми одиночными типами. Основным источником информации о типах является страница scala.reflect.api.Types.
abstract class SingleTypeExtractor extends AnyRef
abstract type SingletonType >: Null <: Universe.SingletonTypeApi with Universe.Type
Тип Scala одиночных типов, т.е. типы, которые содержат только одно значение non-null. Они включают типы форм
C.this.type C.super.type x.type
а также константные типы.
trait SingletonTypeApi extends AnyRef
Не имеет специальных методов. Существует для обеспечения стираемой идентичности SingletonType.
abstract type SuperType >: Null <: Universe.SuperTypeApi with Universe.SingletonType
Тип SuperType не записывается напрямую, но возникает, когда C.super используется в качестве префикса в TypeRef или SingleType. Его внутреннее представление
SuperType(thistpe, supertpe)
Здесь, thistpe — тип соответствующего this-типа. Например, в типе, полученном из C.super, часть thistpe была бы ThisType(C). supertpe — тип суперкласса, на который ссылается super.
trait SuperTypeApi extends Universe.TypeApi
API, поддерживаемый всеми супертипами. Основным источником информации о типах является страница scala.reflect.api.Types.
abstract class SuperTypeExtractor extends AnyRef
abstract type ThisType >: Null <: Universe.ThisTypeApi with Universe.SingletonType
Одиночный тип, описывающий типы в левой форме, с соответствующим ThisType представлением справа:
C.this.type ThisType(C)
trait ThisTypeApi extends Universe.TypeApi
API, поддерживаемый всеми типами this. Основным источником информации о типах является страница scala.reflect.api.Types.
abstract class ThisTypeExtractor extends AnyRef
abstract type Type >: Null <: Universe.TypeApi
Тип Scala-типов, а также подписей типов Scala. (Внутри нет различия между ними).
abstract class TypeApi extends AnyRef
API типов. Основным источником информации о типах является страница scala.reflect.api.Types.
abstract type TypeBounds >: Null <: Universe.TypeBoundsApi with Universe.Type
Тип TypeBounds используется для указания нижних и верхних границ типов для параметров типов и абстрактных типов. Это не тип первого класса. Если абстрактный тип или параметр типа объявлен одним из способов слева, его тип — это тип TypeBounds справа.
T >: L <: U TypeBounds(L, U) T >: L TypeBounds(L, Any) T <: U TypeBounds(Nothing, U)
trait TypeBoundsApi extends Universe.TypeApi
API, поддерживаемый всеми границами типов. Основным источником информации о типах является страница scala.reflect.api.Types.
abstract class TypeBoundsExtractor extends AnyRef
abstract type TypeRef >: Null <: Universe.TypeRefApi with Universe.Type
Тип TypeRef описывает типы любого из представленных слева форм, с их представлениями TypeRef справа.
T # C[T_1, ..., T_n] TypeRef(T, C, List(T_1, ..., T_n)) p.C[T_1, ..., T_n] TypeRef(p.type, C, List(T_1, ..., T_n)) C[T_1, ..., T_n] TypeRef(NoPrefix, C, List(T_1, ..., T_n)) T # C TypeRef(T, C, Nil) p.C TypeRef(p.type, C, Nil) C TypeRef(NoPrefix, C, Nil)
trait TypeRefApi extends Universe.TypeApi
API, поддерживаемый всеми ссылками на типы. Основным источником информации о типах является страница scala.reflect.api.Types.
abstract class TypeRefExtractor extends AnyRef
Абстрактные члены-значения
абстрактное значение AnnotatedType: Universe.AnnotatedTypeExtractor
абстрактное значение BoundedWildcardType: Universe.BoundedWildcardTypeExtractor
абстрактное значение ClassInfoType: Universe.ClassInfoTypeExtractor
абстрактное значение ConstantType: Universe.ConstantTypeExtractor
абстрактное значение ExistentialType: Universe.ExistentialTypeExtractor
абстрактное значение MethodType: Universe.MethodTypeExtractor
абстрактное значение NoPrefix: Universe.Type
Эта константа используется в качестве специального значения, обозначающего пустой префикс в пути зависимого типа. Например, x.type представлен как SingleType(NoPrefix, <x>), где <x> обозначает символ x.
абстрактное значение NoType: Universe.Type
абстрактное значение NullaryMethodType: Universe.NullaryMethodTypeExtractor
абстрактное значение PolyType: Universe.PolyTypeExtractor
абстрактное значение RefinedType: Universe.RefinedTypeExtractor
абстрактное значение SingleType: Universe.SingleTypeExtractor
абстрактное значение SuperType: Universe.SuperTypeExtractor
абстрактное значение ThisType: Universe.ThisTypeExtractor
абстрактное значение TypeBounds: Universe.TypeBoundsExtractor
абстрактное значение TypeRef: Universe.TypeRefExtractor
абстрактное значение WildcardType: Universe.Type
Объект, представляющий неизвестный тип, используемый во время вывода типов. Если вы видите WildcardType вне вывода типов, это, скорее всего, ошибка.
абстрактный метод appliedType(sym: Universe.Symbol, args: Universe.Type*): Universe.Type
- См. также
абстрактный метод appliedType(sym: Universe.Symbol, args: List[Universe.Type]): Universe.Type
- См. также
абстрактный метод appliedType(tycon: Universe.Type, args: Universe.Type*): Universe.Type
- См. также
абстрактный метод appliedType(tycon: Universe.Type, args: List[Universe.Type]): Universe.Type
Создатель приложений типов.
Полезно для объединения и создания типов из обобщенных. Например:
scala> val boolType = typeOf[Boolean] boolType: reflect.runtime.universe.Type = Boolean scala> val optionType = typeOf[Option[_]] optionType: reflect.runtime.universe.Type = Option[_] scala> appliedType(optionType.typeConstructor, boolType) res0: reflect.runtime.universe.Type = Option[Boolean]
абстрактный def glb(ts: List[Universe.Type]): Universe.Type
абстрактный def lub(xs: List[Universe.Type]): Universe.Type
Конкретные члены значений
final def !=(arg0: Any): Boolean
- Определения классов
- AnyRef → Any
final def ##(): Int
- Определения классов
- AnyRef → Any
def +(other: String): String
def ->[B](y: B): (Types, B)
final def ==(arg0: Any): Boolean
- Определения классов
- AnyRef → Any
final def asInstanceOf[T0]: T0
- Определения классов
- Any
def clone(): AnyRef
- Атрибуты
- protected[java.lang]
- Определения классов
- AnyRef
- Аннотации
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
def ensuring(cond: (Types) => Boolean, msg: => Any): Types
def ensuring(cond: (Types) => Boolean): Types
def ensuring(cond: Boolean, msg: => Any): Types
def ensuring(cond: Boolean): Types
final def eq(arg0: AnyRef): Boolean
- Определения классов
- AnyRef
def equals(arg0: AnyRef): Boolean
- Определения классов
- AnyRef → Any
def finalize(): Unit
- Атрибуты
- protected[java.lang]
- Определения классов
- AnyRef
- Аннотации
- @throws(classOf[java.lang.Throwable])
def formatted(fmtstr: String): String
final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
def toString(): String
- Definition Classes
- AnyRef → Any
final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
© 2002-2019 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://www.scala-lang.org/api/2.13.0/scala-reflect/scala/reflect/api/Types.html
ЭКСПЕРИМЕНТАЛЬНО
Тракт, определяющий типы и операции над ними.
Экземпляры типов представляют информацию о типе соответствующего символа. Это включает его члены (методы, поля, параметры типа, вложенные классы, тракты и т. д.) как объявленные напрямую, так и унаследованные, его базовые типы, его стирание и так далее. Типы также предоставляют операции для проверки соответствия типам или эквивалентности или для расширения.
Для создания экземпляра типа в большинстве случаев можно использовать метод scala.reflect.api.TypeTags#typeOf. Он принимает аргумент типа и производит экземпляр
Type, представляющий этот аргумент. Например:В этом примере возвращается scala.reflect.api.Types#TypeRef, который соответствует конструктору типа
List, примененному к аргументу типаInt.В случае обобщенного типа его также можно комбинировать с другими типами, используя scala.reflect.api.Types#appliedType. Например:
Примечание: Метод
typeOfне работает для типов с параметрами типа, таких какtypeOf[List[A]], гдеAявляется параметром типа. В этом случае используйте scala.reflect.api.TypeTags#weakTypeOf вместо него.Для других способов создания экземпляров типов см. соответствующий раздел руководства по рефлексии.
Общие операции над типами
Типы обычно используются для проверки соответствия типов или для запроса объявлений членов или вложенных типов.
<:<иweak_<:<.=:=. Важно отметить, что==не следует использовать для сравнения типов на равенство —==не может проверить равенство типов в присутствии псевдонимов типов, в то время как=:=может.Типы можно запросить для членов и объявлений, используя методы
membersиdeclarations(наряду с их одноэлементными аналогамиmemberиdeclaration), которые предоставляют список определений, связанных с этим типом. Например, чтобы найти методmapтипаList, можно сделать следующее:scala> typeOf[List[_]].member(TermName("map")) res1: reflect.runtime.universe.Symbol = method mapДополнительную информацию о
Typeсм. в руководстве по рефлексии: Символы, деревья и типы