Spec-Zone.ru › Scala 2.13 Reflection

Трейт scala.reflect.api.Types.ClassInfoTypeApi

trait ClassInfoTypeApi extends Universe.TypeApi

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

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

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

абстрактный метод <:<(that: Universe.Type): Boolean

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

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

абстрактный метод =:=(that: Universe.Type): Boolean

Является ли этот тип эквивалентным заданному аргументу типа that?

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

абстрактный метод 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
Определяющие классы
TypeApi

абстрактный метод baseClasses: List[Universe.Symbol]

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

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

абстрактный метод baseType(clazz: Universe.Symbol): Universe.Type

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

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

абстрактный метод companion: Universe.Type

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

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

абстрактный метод contains(sym: Universe.Symbol): Boolean

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

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

абстрактный метод dealias: Universe.Type

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

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

абстрактный метод decl(name: Universe.Name): Universe.Symbol

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

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

абстрактный метод decls: Universe.MemberScope

Область, содержащая определения, составляющие тип класса.

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

абстрактный метод erasure: Universe.Type

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

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

абстрактный метод etaExpand: Universe.Type

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

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

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

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

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

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

абстрактный метод 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
Определяющие классы
TypeApi
См. также

resultType

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

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

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

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

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

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

абстрактный метод map(f: (Universe.Type) => Universe.Type): Universe.Type

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

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

абстрактный метод member(name: Universe.Name): Universe.Symbol

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

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

абстрактный метод members: Universe.MemberScope

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

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

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

абстрактный метод orElse(alt: => Universe.Type): Universe.Type

Предлагает альтернативу, если тип является NoType.

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

абстрактный метод paramLists: List[List[Universe.Symbol]]

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

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

абстрактный метод parents: List[Universe.Type]

абстрактный метод 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
Определяющие классы
TypeApi
См. также

finalResultType

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

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

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

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

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

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

абстрактный метод takesTypeArgs: Boolean

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

Definition Classes
TypeApi

abstract def termSymbol: Universe.Symbol

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

Definition Classes
TypeApi

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)
Definition Classes
TypeApi

abstract def typeConstructor: Universe.Type

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

Definition Classes
TypeApi

abstract def typeParams: List[Universe.Symbol]

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

Definition Classes
TypeApi

abstract def typeSymbol: Universe.Symbol

Символ, лежащий в основе типа класса.

Definition Classes
ClassInfoTypeApi → TypeApi

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

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

Definition Classes
TypeApi

abstract def widen: Universe.Type

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

Пример:

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

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

Definition Classes
TypeApi

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

Definition Classes
TypeApi
Annotations
@deprecated
Устарело

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

См. также

decl

abstract def declarations: Universe.MemberScope

Definition Classes
TypeApi
Annotations
@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)))

Definition Classes
TypeApi
Annotations
@deprecated
Устарело

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

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

Definition Classes
TypeApi
Annotations
@deprecated
Устарело

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

См. также

paramLists

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

final def !=(arg0: Any): Boolean

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

final def ##(): Int

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

def +(other: String): String

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

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

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

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

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

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

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

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

def ensuring(cond: Boolean): Universe.ClassInfoTypeApi

Неявный
Этот член добавлен с помощью неявного преобразования из Universe.ClassInfoTypeApi вEnsuring[Universe.ClassInfoTypeApi] выполняемое методом 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.ClassInfoTypeApi вStringFormat[Universe.ClassInfoTypeApi] с помощью метода 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$ClassInfoTypeApi.html

Spec-Zone.ru

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