Spec-Zone.ru › Scala 2.13 Reflection

Аннотация scala.reflect.api.Types.Type

abstract type Type >: Null <: Universe.TypeApi

Тип Scala-типов и также сигнатур Scala-типов. (Внутри разницы между ними нет).

Source
Types.scala
Линейные надтипы
Universe.TypeApi, AnyRef, Any
Известные подклассы
AnnotatedType, BoundedWildcardType, ClassInfoType, CompoundType, ConstantType, ExistentialType, MethodType, NullaryMethodType, PolyType, RefinedType, SingleType, SingletonType, SuperType, ThisType, TypeBounds, TypeRef

Абстрактные члены значения

abstract def <:<(that: Universe.Type): Boolean

Соответствует ли этот тип заданному аргументу типа that?

Определяющие классы
TypeApi

abstract def =:=(that: Universe.Type): Boolean

Эквивалентен ли этот тип заданному аргументу типа that?

Определяющие классы
TypeApi

abstract def asSeenFrom(pre: Universe.Type, clazz: Universe.Symbol): Universe.Type

Этот тип, видимый из префикса pre и класса clazz. Это означает: Замените все ThisTypes clazz или одного из его подклассов на pre и инициализируйте все параметры аргументами pre. Поступайте аналогично для ThisTypes, ссылающихся на внешние классы.

Пример:

scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._

scala> class D[T] { def m: T = ??? }
defined class D

scala> class C extends D[Int]
defined class C

scala> val D = typeOf[D[_]].typeSymbol.asClass
D: reflect.runtime.universe.ClassSymbol = class D

scala> val C = typeOf[C].typeSymbol.asClass
C: reflect.runtime.universe.ClassSymbol = class C

scala> val T = D.typeParams(0).asType.toType
T: reflect.runtime.universe.Type = T

scala> T.asSeenFrom(ThisType(C), D)
res0: reflect.runtime.universe.Type = scala.Int
Определяющие классы
TypeApi

abstract def baseClasses: List[Universe.Symbol]

Список всех базовых классов этого типа (включая его собственный typeSymbol) в порядке линеаризации, начиная с самого класса и заканчивая классом Any.

Определяющие классы
TypeApi

abstract def baseType(clazz: Universe.Symbol): Universe.Type

Наименьший экземпляр типа данного класса, который является супертипом этого типа. Пример:

class D[T]
class C extends p.D[Int]
ThisType(C).baseType(D) = p.D[Int]
Определяющие классы
TypeApi

abstract def companion: Universe.Type

Сигнатура типа компаньона базового символа класса. NoType, если базовый символ не является символом класса или если у него нет компаньона.

Определяющие классы
TypeApi

abstract def contains(sym: Universe.Symbol): Boolean

Содержит ли этот тип ссылку на заданный символ?

Определяющие классы
TypeApi

abstract def dealias: Universe.Type

Развертывает псевдонимы типов, возникающие из членов типов. Обратите внимание, что псевдонимы типов могут скрываться под одиночными типами, а одиночные типы могут скрываться внутри псевдонимов типов. Более того, псевдонимы могут скрываться в верхних границах абстрактных типов. Поэтому необходимо тщательно продумать логику распаковки, специфичную для вашего случая использования.

Определяющие классы
TypeApi

abstract def decl(name: Universe.Name): Universe.Symbol

Определенные или объявленные члены с именем name в этом типе; OverloadedSymbol, если их несколько, NoSymbol, если нет ни одного. Альтернативы перегруженного символа появляются в порядке их объявления.

Определяющие классы
TypeApi

abstract def decls: Universe.MemberScope

Scope, содержащий непосредственно объявленные члены этого типа. В отличие от members этот метод не возвращает унаследованные члены.

Члены в возвращаемой области видимости могут отображаться в произвольном порядке. Используйте declarations.sorted, чтобы получить упорядоченный список членов.

Определяющие классы
TypeApi

abstract def erasure: Universe.Type

Стертый тип, соответствующий этому типу после выполнения всех преобразований из Scala в Java.

Определяющие классы
TypeApi

abstract def etaExpand: Universe.Type

Преобразует TypeRef высшего порядка в PolyType. Функции над типами также реализованы как PolyType.

Пример: (в примере ниже <List> - это конструктор типа List) TypeRef(pre, <List>, List()) заменяется на PolyType(X, TypeRef(pre, <List>, List(X)))

Определяющие классы
TypeApi

abstract def exists(p: (Universe.Type) => Boolean): Boolean

Есть ли часть этого типа, которая удовлетворяет предикату p?

Определяющие классы
TypeApi

abstract def finalResultType: Universe.Type

Для методов с несколькими аргументами/без аргументов или полиморфных типов — это тип результата, без методов — тип сам по себе.

scala> class C {
     | def foo[T](x: T)(y: T) = ???
     | def bar: Int = ???
     | }
defined class C

scala> typeOf[C].member(TermName("foo")).asMethod
res0: reflect.runtime.universe.MethodSymbol = method foo

scala> res0.info // PolyType wrapping a MethodType
res1: reflect.runtime.universe.Type = [T](x: T)(y: T)scala.Nothing

scala> res1.resultType // MethodType wrapping a MethodType
res2: reflect.runtime.universe.Type = (x: T)(y: T)scala.Nothing

scala> res1.resultType.resultType // vanilla MethodType
res3: reflect.runtime.universe.Type = (y: T)scala.Nothing

scala> res1.resultType.resultType.resultType
res4: reflect.runtime.universe.Type = scala.Nothing

scala> res1.finalResultType
res5: reflect.runtime.universe.Type = scala.Nothing

scala> typeOf[C].member(TermName("bar")).asMethod
res6: reflect.runtime.universe.MethodSymbol = method bar

scala> res6.info
res7: reflect.runtime.universe.Type = => scala.Int

scala> res6.info.resultType
res8: reflect.runtime.universe.Type = scala.Int

scala> res6.info.finalResultType
res9: reflect.runtime.universe.Type = scala.Int
Definition Classes
TypeApi
См. также

resultType

abstract def find(p: (Universe.Type) => Boolean): Option[Universe.Type]

Возвращает, при наличии, первый тип (в порядке обхода дерева в ширину), удовлетворяющий предикату p, или None, если такой не найден.

Definition Classes
TypeApi

abstract def foreach(f: (Universe.Type) => Unit): Unit

Применяет f к каждой части этого типа, только для побочных эффектов.

Definition Classes
TypeApi

abstract def map(f: (Universe.Type) => Universe.Type): Universe.Type

Применяет f к каждой части этого типа, возвращая новый тип. Подтипы обрабатываются до их родительских типов.

Definition Classes
TypeApi

abstract def member(name: Universe.Name): Universe.Symbol

Член с заданным именем, либо объявленный напрямую, либо унаследованный, OverloadedSymbol если несколько, NoSymbol если не существует.

Definition Classes
TypeApi

abstract def members: Universe.MemberScope

A Scope содержащий все члены этого типа (непосредственно объявленные или унаследованные). В отличие от declarations, этот метод также возвращает унаследованные члены.

Члены в возвращаемом пространстве имён могут быть расположены в произвольном порядке. Используйте declarations.sorted для получения упорядоченного списка членов.

Definition Classes
TypeApi

abstract def orElse(alt: => Universe.Type): Universe.Type

Предоставляет альтернативный тип, если текущий — NoType.

Definition Classes
TypeApi

abstract def paramLists: List[List[Universe.Symbol]]

Для метода или полиморфного типа — список списков параметров, для всех остальных типов — пустой список списков.

Definition Classes
TypeApi

abstract def resultType: Universe.Type

Для метода (без аргументов) или полиморфного типа — прямой тип результата (может быть MethodType, если метод имеет несколько списков аргументов), для всех остальных типов — тип сам по себе.

scala> class C { def foo[T](x: T)(y: T) = ??? }
defined class C

scala> typeOf[C].member(TermName("foo")).asMethod
res0: reflect.runtime.universe.MethodSymbol = method foo

scala> res0.info // PolyType wrapping a MethodType
res1: reflect.runtime.universe.Type = [T](x: T)(y: T)scala.Nothing

scala> res1.resultType // MethodType wrapping a MethodType
res2: reflect.runtime.universe.Type = (x: T)(y: T)scala.Nothing

scala> res1.resultType.resultType // vanilla MethodType
res3: reflect.runtime.universe.Type = (y: T)scala.Nothing

scala> res1.resultType.resultType.resultType
res4: reflect.runtime.universe.Type = scala.Nothing

scala> res1.finalResultType
res5: reflect.runtime.universe.Type = scala.Nothing
Definition Classes
TypeApi
См. также

finalResultType

abstract def substituteSymbols(from: List[Universe.Symbol], to: List[Universe.Symbol]): Universe.Type

Заменяет символы to на соответствующие вхождения ссылок на символы from в этом типе.

Definition Classes
TypeApi

abstract def substituteTypes(from: List[Universe.Symbol], to: List[Universe.Type]): Universe.Type

Заменяет типы to на соответствующие вхождения ссылок на символы from в этом типе.

Definition Classes
TypeApi

abstract def takesTypeArgs: Boolean

Является ли этот тип конструктором типа, которому не хватает аргументов типа?

Definition Classes
TypeApi

abstract def termSymbol: Universe.Symbol

Символ термина, связанный с типом, или NoSymbol для типов, которые не ссылаются на символ термина.

Классы-определения
TypeApi

абстрактный def typeArgs: Список[ТипВселенной]

Список аргументов типа, встроенных в эту ссылку на тип. В зависимости от вашего случая использования, вы можете или не можете сначала вызвать dealias.

scala> type T = List[Int]
defined type alias T

scala> typeOf[T].typeArgs
res0: List[reflect.runtime.universe.Type] = List()

scala> typeOf[T].dealias.typeArgs
res1: List[reflect.runtime.universe.Type] = List(scala.Int)
Классы-определения
TypeApi

абстрактный def typeConstructor: ТипВселенной

Возвращает соответствующий конструктор типов (например, Список для List[T] или List[String])

Классы-определения
TypeApi

абстрактный def typeParams: Список[СимволВселенной]

Для полиморфного типа, его параметры типа, пустой список для всех остальных типов.

Классы-определения
TypeApi

абстрактный def typeSymbol: СимволВселенной

Символ типа, связанный с типом, или NoSymbol для типов, которые не ссылаются на символ типа.

Классы-определения
TypeApi

абстрактный def weak_<:<(that: ТипВселенной): Boolean

Соответствует ли этот тип слабо заданному аргументу типа that, т.е., либо соответствует в терминах <:<, либо оба являются примитивными числовыми типами, которые соответствуют согласно разделу «Слабое соответствие» в спецификации. Например, Int weak_<:< Long.

Классы-определения
TypeApi

абстрактный def widen: ТипВселенной

Если это тип-синглтон, расширьте его до ближайшего базового типа, не являющегося типом-синглтоном, применив одну или несколько underlying дессылок. Если это не тип-синглтон, возвращает этот тип.

Пример:

класс Outer { класс C; val x: C } val o: Outer <o.x.type>.widen = o.C

Обратите внимание, что псевдонимы типов могут скрываться под типами-синглтонами, а типы-синглтоны могут скрываться внутри псевдонимов типов. Кроме того, псевдонимы могут скрываться в верхних границах абстрактных типов. Поэтому следует тщательно обдумать и реализовать логику разворачивания, специфичную для вашего случая использования.

Классы-определения
TypeApi

абстрактный def declaration(name: ИмяВселенной): СимволВселенной

Классы-определения
TypeApi
Аннотации
@deprecated
Устаревшее

(С версии 2.11.0) использовать decl вместо этого

См. также

decl

абстрактный def declarations: ScopeЧленовВселенной

Классы-определения
TypeApi
Аннотации
@deprecated
Устаревшее

(С версии 2.11.0) использовать decls вместо этого

См. также

decls

абстрактный def normalize: ТипВселенной

Приведение к бета эта-долгому нормальному виду. Расширяет псевдонимы типов и преобразует ссылки на типы высшего порядка в PolyTypes. Функции над типами также реализованы как PolyTypes.

Пример: (в приведенном ниже примере <Список> — это конструктор типа списка) TypeRef(префикс, <Список>, Список()) заменяется на PolyType(X, TypeRef(префикс, <Список>, Список(X)))

Классы-определения
TypeApi
Аннотации
@deprecated
Устаревшее

(С версии 2.11.0) используйте dealias или etaExpand вместо этого

абстрактный def paramss: Список[Список[СимволВселенной]]

Классы-определения
TypeApi
Аннотации
@deprecated
Устаревшее

(С версии 2.11.0) используйте paramLists вместо этого

См. также

paramLists

Члены-значения конкретного типа

final def !=(arg0: Any): Boolean

Definition Classes
AnyRef → Any

final def ##(): Int

Definition Classes
AnyRef → Any

final def ==(arg0: Any): Boolean

Definition Classes
AnyRef → Any

final def asInstanceOf[T0]: T0

Definition Classes
Any

def clone(): AnyRef

Attributes
protected[java.lang]
Definition Classes
AnyRef
Annotations
@throws(classOf[java.lang.CloneNotSupportedException]) @native()

final def eq(arg0: AnyRef): Boolean

Definition Classes
AnyRef

def equals(arg0: AnyRef): Boolean

Definition Classes
AnyRef → Any

def finalize(): Unit

Attributes
protected[java.lang]
Definition Classes
AnyRef
Annotations
@throws(classOf[java.lang.Throwable])

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$Type.html

Spec-Zone.ru

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