Spec-Zone.ru › Scala 2.13 Reflection

Тракт scala.reflect.api.Types

тракт Types extends AnyRef

ЭКСПЕРИМЕНТАЛЬНО

Тракт, определяющий типы и операции над ними.

Экземпляры типов представляют информацию о типе соответствующего символа. Это включает его члены (методы, поля, параметры типа, вложенные классы, тракты и т. д.) как объявленные напрямую, так и унаследованные, его базовые типы, его стирание и так далее. Типы также предоставляют операции для проверки соответствия типам или эквивалентности или для расширения.

Для создания экземпляра типа в большинстве случаев можно использовать метод scala.reflect.api.TypeTags#typeOf. Он принимает аргумент типа и производит экземпляр Type, представляющий этот аргумент. Например:

scala> typeOf[List[Int]]
res0: reflect.runtime.universe.Type = scala.List[Int]

В этом примере возвращается scala.reflect.api.Types#TypeRef, который соответствует конструктору типа List, примененному к аргументу типа Int.

В случае обобщенного типа его также можно комбинировать с другими типами, используя scala.reflect.api.Types#appliedType. Например:

scala> val intType = typeOf[Int]
intType: reflect.runtime.universe.Type = Int

scala> val listType = typeOf[List[_]]
listType: reflect.runtime.universe.Type = List[_]

scala> appliedType(listType.typeConstructor, intType)
res0: reflect.runtime.universe.Type = List[Int]

Примечание: Метод typeOf не работает для типов с параметрами типа, таких как typeOf[List[A]], где A является параметром типа. В этом случае используйте scala.reflect.api.TypeTags#weakTypeOf вместо него.

Для других способов создания экземпляров типов см. соответствующий раздел руководства по рефлексии.

Общие операции над типами

Типы обычно используются для проверки соответствия типов или для запроса объявлений членов или вложенных типов.

  • Отношения суpertyping можно проверить, используя <:< и weak_<:<.
  • Равенство типов можно проверить с помощью =:=. Важно отметить, что == не следует использовать для сравнения типов на равенство — == не может проверить равенство типов в присутствии псевдонимов типов, в то время как =:= может.

Типы можно запросить для членов и объявлений, используя методы members и declarations (наряду с их одноэлементными аналогами member и declaration), которые предоставляют список определений, связанных с этим типом. Например, чтобы найти метод map типа List, можно сделать следующее:

scala> typeOf[List[_]].member(TermName("map"))
res1: reflect.runtime.universe.Symbol = method map

Дополнительную информацию о Type см. в руководстве по рефлексии: Символы, деревья и типы

Self Type
Universe
Source
Types.scala
Линейные надтипы
AnyRef, Any
Известные подклассы
JavaUniverse, Universe, Universe

Члены типов

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

абстрактный метод appliedType(sym: Universe.Symbol, args: List[Universe.Type]): Universe.Type

См. также

appliedType

абстрактный метод appliedType(tycon: Universe.Type, args: Universe.Type*): Universe.Type

См. также

appliedType

абстрактный метод 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

Неявный
Этот член добавлен неявным преобразованием из Types вany2stringadd[Types] выполненное методом any2stringadd в scala.Predef.
Определения классов
any2stringadd

def ->[B](y: B): (Types, B)

Неявный
Этот член добавлен неявным преобразованием из Types вArrowAssoc[Types] выполненное методом ArrowAssoc в scala.Predef.
Определения классов
ArrowAssoc
Аннотации
@inline()

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

Неявный
Этот член добавлен неявным преобразованием из Types вEnsuring[Types] выполненное методом Ensuring в scala.Predef.
Определения классов
Ensuring

def ensuring(cond: (Types) => Boolean): Types

Неявный
Этот член добавлен неявным преобразованием из Types вEnsuring[Types] выполненное методом Ensuring в scala.Predef.
Определения классов
Ensuring

def ensuring(cond: Boolean, msg: => Any): Types

Неявный
Этот член добавлен неявным преобразованием из Types вEnsuring[Types] выполненное методом Ensuring в scala.Predef.
Определения классов
Ensuring

def ensuring(cond: Boolean): Types

Неявный
Этот член добавлен неявным преобразованием из Types вEnsuring[Types] выполненное методом Ensuring в scala.Predef.
Определения классов
Ensuring

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

Неявный
Этот член добавлен неявным преобразованием из Types вStringFormat[Types] выполненное методом StringFormat в scala.Predef.
Определения классов
StringFormat
Аннотации
@inline()

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

Spec-Zone.ru

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