Spec-Zone.ru › Scala 2.13 Reflection

Класс scala.reflect.api.Types.TypeApi

абстрактный класс TypeApi extends AnyRef

API типов. Основным источником информации о типах является страница scala.reflect.api.Types.

Источник
Types.scala
Линейные супертипы
AnyRef, Any
Известные подклассы
AnnotatedType, AnnotatedTypeApi, BoundedWildcardType, BoundedWildcardTypeApi, ClassInfoType, ClassInfoTypeApi, CompoundType, ConstantType, ConstantTypeApi, ExistentialType, ExistentialTypeApi, MethodType, MethodTypeApi, NullaryMethodType, NullaryMethodTypeApi, PolyType, PolyTypeApi, RefinedType, RefinedTypeApi, SingleType, SingleTypeApi, SingletonType, SuperType, SuperTypeApi, ThisType, ThisTypeApi, Type, TypeBounds, TypeBoundsApi, TypeRef, TypeRefApi

Конструкторы экземпляров

новый TypeApi()

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

абстрактный def <:<(that: Universe.Type): Boolean

абстрактный def =:=(that: Universe.Type): Boolean

абстрактный def asSeenFrom(pre: Universe.Type, clazz: Universe.Symbol): Universe.Type

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

Пример:

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

абстрактный def baseClasses: List[Universe.Symbol]

абстрактный def baseType(clazz: Universe.Symbol): Universe.Type

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

class D[T]
class C extends p.D[Int]
ThisType(C).baseType(D) = p.D[Int]

абстрактный def companion: Universe.Type

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

абстрактный def contains(sym: Universe.Symbol): Boolean

абстрактный def dealias: Universe.Type

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

абстрактный def decl(name: Universe.Name): Universe.Symbol

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

абстрактный def decls: Universe.MemberScope

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

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

абстрактный def erasure: Universe.Type

абстрактный def etaExpand: Universe.Type

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

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

абстрактный def exists(p: (Universe.Type) => Boolean): Boolean

абстрактный 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
См. также

resultType

абстрактный def find(p: (Universe.Type) => Boolean): Option[Universe.Type]

абстрактный def foreach(f: (Universe.Type) => Unit): Unit

абстрактный def map(f: (Universe.Type) => Universe.Type): Universe.Type

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

абстрактный def member(name: Universe.Name): Universe.Symbol

абстрактный def members: Universe.MemberScope

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

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

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

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

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
См. также

finalResultType

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

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

abstract def takesTypeArgs: Boolean

abstract def termSymbol: Universe.Symbol

abstract def typeArgs: List[Universe.Type]

Список аргументов типа, встроенных в эту ссылку на тип. В зависимости от вашего случая использования, вам может или не потребоваться сначала вызвать 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)

abstract def typeConstructor: Universe.Type

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

abstract def typeParams: List[Universe.Symbol]

abstract def typeSymbol: Universe.Symbol

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

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

abstract def widen: Universe.Type

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

Пример:

class Outer { class C ; val x: C } val o: Outer <o.x.type>.widen = o.C

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

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

Аннотации
@deprecated
Устарело

(Начиная с версии 2.11.0) используйте decl вместо

См. также

decl

abstract def declarations: Universe.MemberScope

Аннотации
@deprecated
Устарело

(Начиная с версии 2.11.0) используйте decls вместо

См. также

decls

abstract def normalize: Universe.Type

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

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

Аннотации
@deprecated
Устарело

(Начиная с версии 2.11.0) используйте dealias или etaExpand вместо

абстрактный def paramss: List[List[Universe.Symbol]]

Аннотации
@deprecated
Устаревшее

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

См. также

paramLists

Члены конкретных значений

final def !=(arg0: Any): Boolean

Определяющие классы
AnyRef → Any

final def ##(): Int

Определяющие классы
AnyRef → Any

def +(other: String): String

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

def ->[B](y: B): (Universe.TypeApi, B)

Неявный
Этот член добавлен неявным преобразованием из Universe.TypeApi вArrowAssoc[Universe.TypeApi] выполненным методом 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: (Universe.TypeApi) => Boolean, msg: => Any): Universe.TypeApi

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

def ensuring(cond: (Universe.TypeApi) => Boolean): Universe.TypeApi

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

def ensuring(cond: Boolean, msg: => Any): Universe.TypeApi

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

def ensuring(cond: Boolean): Universe.TypeApi

Неявный
Этот член добавлен неявным преобразованием из Universe.TypeApi вEnsuring[Universe.TypeApi] выполненным методом 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

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

final def getClass(): Class[_ <: AnyRef]

Определяющие классы
AnyRef → Any
Аннотации
@native()

def hashCode(): Int

Определяющие классы
AnyRef → Any
Аннотации
@native()

final def isInstanceOf[T0]: Boolean

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

final def ne(arg0: AnyRef): Boolean

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

final def notify(): Unit

Определяющие классы
AnyRef
Аннотации
@native()

final def notifyAll(): Unit

Определяющие классы
AnyRef
Аннотации
@native()

final def synchronized[T0](arg0: => T0): T0

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

def toString(): String

Определяющие классы
AnyRef → Any

final def wait(): Unit

Определяющие классы
AnyRef
Аннотации
@throws(classOf[java.lang.InterruptedException])

final def wait(arg0: Long, arg1: Int): Unit

Определяющие классы
AnyRef
Аннотации
@throws(classOf[java.lang.InterruptedException])

final def wait(arg0: Long): Unit

Определяющие классы
AnyRef
Аннотации
@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$TypeApi.html

Spec-Zone.ru

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