Spec-Zone.ru › OpenJDK 25

Interface ElementVisitor<R,P>

Параметры типа:
R — тип возвращаемого значения методов этого посетителя. Используйте Void для посетителей, которым не нужно возвращать результаты.
P — тип дополнительного параметра методов этого посетителя. Используйте Void для посетителей, которым не нужен дополнительный параметр.
Все известные реализующие классы:
AbstractElementVisitor14, AbstractElementVisitor6, AbstractElementVisitor7, AbstractElementVisitor8, AbstractElementVisitor9, AbstractElementVisitorPreviewPREVIEW, ElementKindVisitor14, ElementKindVisitor6, ElementKindVisitor7, ElementKindVisitor8, ElementKindVisitor9, ElementKindVisitorPreviewPREVIEW, ElementScanner14, ElementScanner6, ElementScanner7, ElementScanner8, ElementScanner9, ElementScannerPreviewPREVIEW, SimpleElementVisitor14, SimpleElementVisitor6, SimpleElementVisitor7, SimpleElementVisitor8, SimpleElementVisitor9, SimpleElementVisitorPreviewPREVIEW
public interface ElementVisitor<R,P>
Посетитель программных элементов, реализующий шаблон проектирования «Посетитель». Классы, реализующие этот интерфейс, используются для выполнения операций над элементом, когда его тип неизвестен во время компиляции. Когда посетитель передаётся методу элемента accept, вызывается наиболее подходящий для этого элемента метод visitXyz.

Классы, реализующие этот интерфейс, могут выбрасывать или не выбрасывать NullPointerException, если дополнительный параметр p имеет значение null; подробности см. в документации реализующего класса.

Примечание к API:
ПРЕДУПРЕЖДЕНИЕ: В этот интерфейс могут быть добавлены методы для поддержки новых, пока неизвестных языковых конструкций, которые появятся в будущих версиях языка программирования Java. Такие изменения уже вносились для поддержки языковых возможностей, добавленных после появления этого API. Классы посетителей, непосредственно реализующие этот интерфейс, могут быть несовместимы с будущими версиями платформы на уровне исходного кода. Чтобы избежать такой несовместимости, вместо этого рекомендуется расширять соответствующий абстрактный класс посетителя, реализующий этот интерфейс. Однако в API для параметров, возвращаемых значений и т. п. обычно следует использовать этот интерфейс посетителя, а не один из абстрактных классов.

Ожидается, что методы для поддержки новых языковых конструкций будут добавляться в виде методов по умолчанию, обеспечивающих высокую совместимость исходного кода, как это сделано для visitModule и visitRecordComponent. Реализации методов по умолчанию, в свою очередь, вызывают visitUnknown; это поведение будет переопределено в конкретных посетителях, поддерживающих версию исходного кода с новой языковой конструкцией.

В пакете util есть несколько семейств классов, реализующих этот интерфейс посетителя. Семейства следуют шаблону именования вида FooVisitorN, где N указывает версию исходного кода, для которой предназначен посетитель. В частности, ожидается, что FooVisitorN будет обрабатывать все языковые конструкции, присутствующие в версии исходного кода N. Если в версии N + 1 (или последующих выпусках) не добавлено новых языковых конструкций, FooVisitorN может также обрабатывать эту более позднюю версию исходного кода; в таком случае аннотация SupportedSourceVersion класса FooVisitorN будет указывать более позднюю версию. При посещении элемента, представляющего языковую конструкцию, введённую после версии исходного кода N, FooVisitorN выбросит UnknownElementException, если это поведение не переопределено.

При выборе подкласса из семейства посетителей расширение наиболее новой версии увеличивает диапазон поддерживаемых версий исходного кода. При выборе семейства посетителей для расширения учитывайте их встроенные возможности:

  • AbstractElementVisitor: каркасные реализации посетителей.
  • SimpleElementVisitor: поддержка действий по умолчанию и возвращаемого значения по умолчанию.
  • ElementKindVisitor: методы посещения для каждого вида элемента, поскольку некоторые категории элементов могут иметь несколько видов.
  • ElementScanner: сканеры — это посетители, которые обходят элемент и связанные с ним вложенные элементы.
Начиная с версии:
1.6

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

Модификатор и тип Метод Описание
default R visit(Element e)
Вспомогательный метод, эквивалентный visit(e, null).
R visit(Element e, P p)
Посещает элемент.
R visitExecutable(ExecutableElement e, P p)
Посещает исполняемый элемент.
default R visitModule(ModuleElement e, P p)
Посещает элемент-модуль.
R visitPackage(PackageElement e, P p)
Посещает элемент-пакет.
default R visitRecordComponent(RecordComponentElement e, P p)
Посещает элемент компонента записи.
R visitType(TypeElement e, P p)
Посещает элемент-типа.
R visitTypeParameter(TypeParameterElement e, P p)
Посещает элемент параметра типа.
R visitUnknown(Element e, P p)
Посещает элемент неизвестного вида.
R visitVariable(VariableElement e, P p)
Посещает элемент-переменную.

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

visit

R visit(Element e, P p)
Посещает элемент.
Параметры:
e — элемент для посещения
p — параметр, заданный посетителем
Возвращает:
результат, заданный посетителем

visit

default R visit(Element e)
Вспомогательный метод, эквивалентный visit(e, null).
Требования к реализации:
Реализация по умолчанию — visit(e, null).
Параметры:
e — элемент для посещения
Возвращает:
результат, заданный посетителем

visitPackage

R visitPackage(PackageElement e, P p)
Посещает элемент-пакет.
Параметры:
e — элемент для посещения
p — параметр, заданный посетителем
Возвращает:
результат, заданный посетителем

visitType

R visitType(TypeElement e, P p)
Посещает элемент-типа.
Параметры:
e — элемент для посещения
p — параметр, заданный посетителем
Возвращает:
результат, заданный посетителем

visitVariable

R visitVariable(VariableElement e, P p)
Посещает элемент-переменную.
Параметры:
e — элемент для посещения
p — параметр, заданный посетителем
Возвращает:
результат, заданный посетителем

visitExecutable

R visitExecutable(ExecutableElement e, P p)
Посещает исполняемый элемент.
Параметры:
e — элемент для посещения
p — параметр, заданный посетителем
Возвращает:
результат, заданный посетителем

visitTypeParameter

R visitTypeParameter(TypeParameterElement e, P p)
Посещает элемент параметра типа.
Параметры:
e — элемент для посещения
p — параметр, заданный посетителем
Возвращает:
результат, заданный посетителем

visitUnknown

R visitUnknown(Element e, P p)
Посещает элемент неизвестного вида. Это может произойти, если язык будет развиваться и в иерархию Element будут добавлены новые виды элементов.
Параметры:
e — элемент для посещения
p — параметр, заданный посетителем
Возвращает:
результат, заданный посетителем
Выбрасывает:
UnknownElementException — реализация посетителя может по желанию выбросить это исключение

visitModule

default R visitModule(ModuleElement e, P p)
Посещает элемент-модуль.
Требования к реализации:
Реализация по умолчанию посещает ModuleElement, вызывая visitUnknown(e, p).
Параметры:
e — элемент для посещения
p — параметр, заданный посетителем
Возвращает:
результат, заданный посетителем
Начиная с версии:
9

visitRecordComponent

default R visitRecordComponent(RecordComponentElement e, P p)
Посещает элемент компонента записи.
Требования к реализации:
Реализация по умолчанию посещает RecordComponentElement, вызывая visitUnknown(e, p).
Параметры:
e — элемент для посещения
p — параметр, заданный посетителем
Возвращает:
результат, заданный посетителем
Начиная с версии:
16

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе документации Java SE, содержащем более подробные описания для разработчиков, общие сведения, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.compiler/javax/lang/model/element/ElementVisitor.html

Spec-Zone.ru

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