Spec-Zone.ru › OpenJDK 27

Типы интерфейсов

public interface Types
Вспомогательные методы для работы с типами. Большинство методов работают с примитивными типами, ссылочными типами (включая типы массивов и тип null), пересечениями типов и псевдотипом «void». Исполняемые типы и псевдотипы для пакетов и модулей, как правило, не входят в область применения этих методов. Один или несколько аргументов, не входящих в область применения, обычно приводят к тому, что метод выбрасывает исключение IllegalArgumentException.

Если метод возвращает зеркало типа или коллекцию зеркал типов, то все такие зеркала представляют типы без аннотаций типов, если не указано иное.

Примечание о совместимости: В будущих выпусках платформы в этот интерфейс могут быть добавлены методы.

Примечание к API:
В эталонной реализации обработка ошибочных типов, как правило, не приводит к тому, что методы этого интерфейса выбрасывают IllegalArgumentException.
С версии:
1.6
См. также:
  • ProcessingEnvironment.getTypeUtils()

Краткое описание методов

Модификатор и тип Метод Описание
Element asElement(TypeMirror t)
Возвращает элемент, соответствующий типу.
TypeMirror asMemberOf(DeclaredType containing, Element element)
Возвращает тип элемента, рассматриваемого как член заданного типа или иным образом непосредственно содержащегося в нём.
TypeElement boxedClass(PrimitiveType p)
Возвращает класс упакованного значения примитивного типа, переданного в качестве аргумента.
TypeMirror capture(TypeMirror t)
Применяет преобразование захвата к типу.
boolean contains(TypeMirror t1, TypeMirror t2)
Проверяет, содержит ли один аргумент типа другой.
List<? extends TypeMirror> directSupertypes(TypeMirror t)
Возвращает непосредственные суперклассы и суперинтерфейсы типа.
TypeMirror erasure(TypeMirror t)
Возвращает стирание типа.
ArrayType getArrayType(TypeMirror componentType)
Возвращает тип массива с указанным типом компонента.
DeclaredType getDeclaredType(TypeElement typeElem, TypeMirror... typeArgs)
Возвращает тип, соответствующий элементу типа и фактическим аргументам типа.
DeclaredType getDeclaredType(DeclaredType containing, TypeElement typeElem, TypeMirror... typeArgs)
Возвращает тип, соответствующий элементу типа и фактическим аргументам типа, с учётом содержащего типа, членом которого он является.
NoType getNoType(TypeKind kind)
Возвращает псевдотип, используемый там, где неприменим никакой фактический тип.
NullType getNullType()
Возвращает тип null.
PrimitiveType getPrimitiveType(TypeKind kind)
Возвращает примитивный тип.
WildcardType getWildcardType(TypeMirror extendsBound, TypeMirror superBound)
Возвращает новый тип с подстановочным знаком.
boolean isAssignable(TypeMirror t1, TypeMirror t2)
Проверяет, можно ли присвоить значение одного типа переменной другого типа.
boolean isSameType(TypeMirror t1, TypeMirror t2)
Проверяет, представляют ли два объекта TypeMirror один и тот же тип.
boolean isSubsignature(ExecutableType m1, ExecutableType m2)
Проверяет, является ли сигнатура одного метода подсигнатурой другого.
boolean isSubtype(TypeMirror t1, TypeMirror t2)
Проверяет, является ли один тип подтипом другого.
default <T extends TypeMirror>
T
stripAnnotations(T t)
Возвращает зеркало типа, эквивалентное аргументу, но без аннотаций.
PrimitiveType unboxedType(TypeMirror t)
Возвращает тип (примитивный тип) распакованных значений заданного типа.

Подробное описание методов

asElement

Element asElement(TypeMirror t)
Возвращает элемент, соответствующий типу. Тип может быть одним из следующих:
  • DeclaredType
  • TypeVariable
  • псевдотип для пакета или модуля
Метод возвращает null, если тип не соответствует элементу. Типы, не соответствующие элементам, включают:
  • примитивные типы
  • типы массивов
  • исполняемые типы
  • псевдотипы «нет»
  • типы null
  • void
  • аргумент типа с подстановочным знаком
Параметры:
t — тип, который нужно сопоставить элементу
Возвращает:
элемент, соответствующий заданному типу

isSameType

boolean isSameType(TypeMirror t1, TypeMirror t2)
Проверяет, представляют ли два объекта TypeMirror один и тот же тип.

Внимание: если любой из аргументов этого метода представляет собой подстановочный знак, метод вернёт false. Следовательно, подстановочный знак не является тем же типом, что и он сам. На первый взгляд это может показаться неожиданным, но становится понятным, если учесть, что компилятор должен отклонить следующий пример:

  List<?> list = new ArrayList<Object>();
  list.add(list.get(0));

Поскольку аннотации — это лишь метаданные, связанные с типом, набор аннотаций любого из аргументов не учитывается при определении того, представляют ли два объекта TypeMirror один и тот же тип. В частности, два объекта TypeMirror могут иметь разные аннотации и при этом считаться одним и тем же типом.

Примечание к API:
Идентичность TypeMirror зависит от неявного состояния, недоступного напрямую через его методы, в том числе от сведений о наличии несвязанных типов. Не следует ожидать, что объекты TypeMirror, созданные разными реализациями этих интерфейсов, будут считаться равными, даже если моделируется «один и тот же» тип; это аналогично неравенству объектов Class для одного и того же файла класса, загруженного разными загрузчиками классов.
Параметры:
t1 — первый тип
t2 — второй тип
Возвращает:
true тогда и только тогда, когда оба типа совпадают

isSubtype

boolean isSubtype(TypeMirror t1, TypeMirror t2)
Проверяет, является ли один тип подтипом другого. Любой тип считается подтипом самого себя.
Параметры:
t1 — первый тип
t2 — второй тип
Возвращает:
true тогда и только тогда, когда первый тип является подтипом второго
Выбрасывает:
IllegalArgumentException — если передан тип исполняемого элемента, пакета или модуля
См. Спецификацию языка Java:
4.10 Подтипизация

isAssignable

boolean isAssignable(TypeMirror t1, TypeMirror t2)
Проверяет, можно ли присвоить значение одного типа переменной другого типа.
Параметры:
t1 — первый тип
t2 — второй тип
Возвращает:
true тогда и только тогда, когда значение первого типа можно присвоить переменной второго типа
Выбрасывает:
IllegalArgumentException — если передан тип исполняемого элемента, пакета или модуля
См. Спецификацию языка Java:
5.2 Контексты присваивания

contains

boolean contains(TypeMirror t1, TypeMirror t2)
Проверяет, содержит ли один аргумент типа другой.
Параметры:
t1 — первый тип
t2 — второй тип
Возвращает:
true тогда и только тогда, когда первый тип содержит второй
Выбрасывает:
IllegalArgumentException — если передан тип исполняемого элемента, пакета или модуля
См. Спецификацию языка Java:
4.5.1 Аргументы типов параметризованных типов

isSubsignature

boolean isSubsignature(ExecutableType m1, ExecutableType m2)
Проверяет, является ли сигнатура одного метода подсигнатурой другого.
Параметры:
m1 — первый метод
m2 — второй метод
Возвращает:
true тогда и только тогда, когда первая сигнатура является подсигнатурой второй
См. Спецификацию языка Java:
8.4.2 Сигнатура метода

directSupertypes

List<? extends TypeMirror> directSupertypes(TypeMirror t)
Возвращает непосредственные суперклассы и суперинтерфейсы типа. Если имеются интерфейсные типы, они будут последними в списке. Для интерфейсного типа без непосредственных суперинтерфейсов возвращается зеркало типа, представляющее java.lang.Object. Тип java.lang.Object не имеет непосредственного супертипа (JLS §8.1.4, §8.1.5), поэтому для непосредственных суперклассов и суперинтерфейсов зеркала типа, представляющего java.lang.Object, возвращается пустой список. Аннотации непосредственных суперклассов и суперинтерфейсов сохраняются.
Параметры:
t — исследуемый тип
Возвращает:
непосредственные суперклассы и суперинтерфейсы или пустой список, если их нет
Выбрасывает:
IllegalArgumentException — если передан тип исполняемого элемента, пакета или модуля
См. Спецификацию языка Java:
4.10 Подтипизация

erasure

TypeMirror erasure(TypeMirror t)
Возвращает стирание типа.
Параметры:
t — тип, для которого нужно выполнить стирание
Возвращает:
стирание типа
Выбрасывает:
IllegalArgumentException — если передан тип пакета или модуля
См. Спецификацию языка Java:
4.6 Стирание типов

boxedClass

TypeElement boxedClass(PrimitiveType p)
Возвращает класс упакованного значения примитивного типа, переданного в качестве аргумента. То есть применяется преобразование упаковки.
Параметры:
p — примитивный тип, который нужно преобразовать
Возвращает:
класс упакованного значения примитивного типа, переданного в качестве аргумента
См. Спецификацию языка Java:
5.1.7 Преобразование упаковки

unboxedType

PrimitiveType unboxedType(TypeMirror t)
Возвращает тип (примитивный тип) распакованных значений заданного типа. То есть применяется преобразование распаковки.
Параметры:
t — тип, который нужно распаковать
Возвращает:
тип распакованного значения типа t
Выбрасывает:
IllegalArgumentException — если для заданного типа не предусмотрено преобразование распаковки. Преобразование распаковки предусмотрено только для типов классов-обёрток.
См. Спецификацию языка Java:
5.1.8 Преобразование распаковки

capture

TypeMirror capture(TypeMirror t)
Применяет преобразование захвата к типу.
Параметры:
t — тип, который нужно преобразовать
Возвращает:
результат применения преобразования захвата
Выбрасывает:
IllegalArgumentException — если передан тип исполняемого элемента, пакета или модуля
См. Спецификацию языка Java:
5.1.10 Преобразование захвата

getPrimitiveType

PrimitiveType getPrimitiveType(TypeKind kind)
Возвращает примитивный тип.
Параметры:
kind — вид примитивного типа, который нужно вернуть
Возвращает:
примитивный тип
Выбрасывает:
IllegalArgumentException — если kind не является видом примитивного типа
См. Спецификацию языка Java:
4.2 Примитивные типы и значения

getNullType

NullType getNullType()
Возвращает тип null. Это тип значения null.
Возвращает:
тип null
См. Спецификацию языка Java:
4.1 Виды типов и значений

getNoType

NoType getNoType(TypeKind kind)
Возвращает псевдотип, используемый там, где неприменим никакой фактический тип. Возвращаемый вид типа может быть VOID или NONE.

Чтобы получить псевдотип, соответствующий пакету или модулю, вызовите asType() для элемента, моделирующего пакет или модуль. Имена можно преобразовать в элементы пакетов или модулей с помощью Elements.getPackageElement(CharSequence) или Elements.getModuleElement(CharSequence) соответственно.

Параметры:
kind — вид типа, который нужно вернуть
Возвращает:
псевдотип вида VOID или NONE
Выбрасывает:
IllegalArgumentException — если kind недопустим

getArrayType

ArrayType getArrayType(TypeMirror componentType)
Возвращает тип массива с указанным типом компонента. Аннотации типа компонента сохраняются.
Параметры:
componentType — тип компонента
Возвращает:
тип массива с указанным типом компонента
Выбрасывает:
IllegalArgumentException — если тип компонента недопустим для массива. Все допустимые типы являются ссылочными типами или примитивными типами. К недопустимым типам относятся null, исполняемые типы, типы пакетов, модулей и типы с подстановочными знаками.
См. Спецификацию языка Java:
10.1 Типы массивов

getWildcardType

WildcardType getWildcardType(TypeMirror extendsBound, TypeMirror superBound)
Возвращает новый тип с подстановочным знаком. Можно указать одну из границ подстановочного знака или не указывать ни одной, но нельзя указывать обе. Аннотации границ сохраняются.
Параметры:
extendsBound — граница extends (верхняя граница) или null, если её нет
superBound — граница super (нижняя граница) или null, если её нет
Возвращает:
новый тип с подстановочным знаком
Выбрасывает:
IllegalArgumentException — если границы недопустимы. К недопустимым границам относятся все типы, не являющиеся ссылочными типами.
См. Спецификацию языка Java:
4.5.1 Аргументы типов параметризованных типов

getDeclaredType

DeclaredType getDeclaredType(TypeElement typeElem, TypeMirror... typeArgs)
Возвращает тип, соответствующий элементу типа и фактическим аргументам типа. Например, этот метод можно использовать, чтобы получить параметризованный тип Set<String>, передав элемент типа для Set и зеркало типа для String. Аннотации аргументов типа сохраняются.

Число аргументов типа должно либо совпадать с числом формальных параметров типа элемента типа, либо равняться нулю. Если оно равно нулю и элемент типа является обобщённым, возвращается его тип без параметров.

Если возвращается параметризованный тип, его элемент типа не должен содержаться в обобщённом внешнем классе. Например, параметризованный тип Outer<String>.Inner<Number> можно построить, сначала используя этот метод для получения типа Outer<String>, а затем вызывая getDeclaredType(DeclaredType, TypeElement, TypeMirror...).

Параметры:
typeElem — элемент типа
typeArgs — фактические аргументы типа
Возвращает:
тип, соответствующий элементу типа и фактическим аргументам типа
Выбрасывает:
IllegalArgumentException — если передано слишком много или слишком мало аргументов типа либо указан недопустимый аргумент типа или элемент типа

getDeclaredType

DeclaredType getDeclaredType(DeclaredType containing, TypeElement typeElem, TypeMirror... typeArgs)
Возвращает тип, соответствующий элементу типа и фактическим аргументам типа, с учётом содержащего типа, членом которого он является. Например, параметризованный тип Outer<String>.Inner<Number> можно построить, сначала используя getDeclaredType(TypeElement, TypeMirror...) для получения типа Outer<String>, а затем вызывая этот метод. Аннотации аргументов типа сохраняются.

Если содержащий тип является параметризованным типом, число аргументов типа должно совпадать с числом формальных параметров типа у typeElem. Если содержащий тип не является параметризованным типом или если это null, данный метод эквивалентен getDeclaredType(typeElem, typeArgs).

Параметры:
containing — содержащий тип или null, если его нет
typeElem — элемент типа
typeArgs — фактические аргументы типа
Возвращает:
тип, соответствующий элементу типа и фактическим аргументам типа и содержащийся в заданном типе
Выбрасывает:
IllegalArgumentException — если передано слишком много или слишком мало аргументов типа либо указан недопустимый аргумент типа, элемент типа или содержащий тип

asMemberOf

TypeMirror asMemberOf(DeclaredType containing, Element element)
Возвращает тип элемента, рассматриваемого как член заданного типа или иным образом непосредственно содержащегося в нём. Например, если рассматривать параметризованный тип Set<String> как содержащий тип, метод Set.add является ExecutableType, параметр которого имеет тип String.
Параметры:
containing — содержащий тип
element — элемент
Возвращает:
тип элемента в представлении, определяемом содержащим типом
Выбрасывает:
IllegalArgumentException — если элемент недопустим для заданного типа

stripAnnotations

default <T extends TypeMirror> T stripAnnotations(T t)
Возвращает зеркало типа, эквивалентное аргументу, но без аннотаций. Если зеркало типа является составным типом, например типом массива или типом с подстановочным знаком, то все составляющие его типы, такие как тип компонента массива и тип границ типа с подстановочным знаком, также рекурсивно остаются без аннотаций.

Для большинства видов зеркал типов результат

  types.isSameType(typeMirror, types.stripAnnotations(typeMirror))
— true. Для типов с подстановочными знаками предикат false по описанным ранее причинам.
Требования к реализации:
Реализация по умолчанию выбрасывает UnsupportedOperationException.
Параметры типа:
T — конкретный тип зеркала типа
Параметры:
t — зеркало типа
Возвращает:
зеркало типа, эквивалентное аргументу, но без аннотаций
С версии:
23

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2026, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

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