Пакет javax.lang.model.util
За исключением случаев, когда в конкретной реализации определено иное, ожидается, что коллекции, возвращаемые методами в этом пакете, будут неизменяемыми для вызывающей стороны и небезопасными для одновременного доступа.
За исключением случаев, когда определено иное, методы в этом пакете будут выбрасывать исключение NullPointerException, если получат null аргумент.
- API Note:
-
Ожидаемое развитие посетителей
По мере развития языка программирования Java интерфейсы посетителей языка модели также развиваются, как и конкретные посетители в этом пакете. Превью-функция языка в JDK N может иметь API-элементы, добавленные в набор посетителей для уровня языка превью. Такие новые элементы помечены как API превью с возможностью рефлексии. Любые существующие методы, спецификация которых обновлена для поддержки функции превью, не помечены как превью.Остальная часть этого примечания покажет два примера изменений API в модели и посетителях, которые могут быть добавлены для поддержки функции языка. Примеры будут использовать дополнения к части элементов языка модели, но обновления для посетителей типов или значений аннотаций будут аналогичными. Два различных случая:
- Конструкции превью языка имеют соответствующий новый интерфейс моделирования и сопутствующий новый константный тип, например, новая константа
ElementKind - Конструкция превью языка только вызывает введение нового типа без нового интерфейса моделирования
Добавление поддержки посетителей для конструкции языка верхнего уровня
Рассмотрим новую функцию языка, функцию превью 1, в JDK N. Эта функция имеет интерфейс элемента верхнего уровня для его моделирования:package javax.lang.model.element; /** * Represents a preview feature 1. * * @since N */ public interface PreviewFeature1Element extends Element { // Methods to retrieve information specific to the preview feature... }Также будет введен новый тип элемента для моделирования такой функции:// Sample diff of ElementKind.java + /** + * A preview feature 1. + * @since N + */ + PREVIEW_FEATURE_1,
Методdefaultдобавляется вElementVisitorдля поддержки новой конструкции:// Sample diff for ElementVisitor.java + /** + * Visits a preview feature 1. + * + * @implSpec The default implementation visits a {@code + * PreviewFeature1Element} by calling {@code visitUnknown(e, p)}. + * + * @param e the element to visit + * @param p a visitor-specified parameter + * @return a visitor-specified result + * @since N + */ + default R visitPreviewFeature1(PreviewFeature1Element e, P p) { + return visitUnknown(e, p); + }Учитывая методdefaultв интерфейсе посетителя, классы посетителей превью должны переопределять этот метод и выполнить действие, соответствующее семантике посетителя:// Sample diff for AbstractElementVisitorPreview.java // Re-abstract visitPreviewFeature1. + /** + * {@inheritDoc ElementVisitor} + * + * @implSpec Visits a {@code PreviewFeature1Element} in a manner + * defined by a subclass. + * + * @param e {@inheritDoc ElementVisitor} + * @param p {@inheritDoc ElementVisitor} + * @return a visitor-specified result + * @since N + */ + @Override + public abstract R visitPreviewFeature1(PreviewFeature1Element e, P p); // Sample diff for ElementKindVisitorPreview.java // Take the default action for a preview feature 1. + + /** + * {@inheritDoc ElementVisitor} + * + * @implSpec This implementation calls {@code defaultAction}. + * + * @param e {@inheritDoc ElementVisitor} + * @param p {@inheritDoc ElementVisitor} + * @return the result of {@code defaultAction} + * @since N + */ + @Override + public R visitPreviewFeature1(PreviewFeature1Element e, P p) { + return defaultAction(e, p); + } // Sample diff for ElementScannerPreview.java // Scan the enclosed elements of a preview feature 1. + + /** + * {@inheritDoc ElementVisitor} + * + * @implSpec This implementation scans the enclosed elements. + * + * @param e {@inheritDoc ElementVisitor} + * @param p {@inheritDoc ElementVisitor} + * @return {@inheritDoc ElementScanner6} + * @since N + */ + @Override + public R visitPreviewFeature1(PreviewFeature1Element e, P p) { + return scan(e.getEnclosedElements(), p); + } // Sample diff for SimpleElementVisitorPreview.java // Take the default action for a preview feature 1. + /** + * {@inheritDoc ElementVisitor} + * + * @implSpec Visits a {@code PreviewFeature1Element} by calling + *Когда функция превью 1 выходит из превью в JDK (N+k), будет добавлен набор посетителей для уровня языка (N+k). Методы, работающие с функцией, будут перемещены из посетителей превью в посетителей нового уровня языка (N+k). Затем каждый посетитель превью будет изменен на прямой суперкласс соответствующего посетителя (N+k).defaultAction. + * + * @param e {@inheritDoc ElementVisitor} + * @param p {@inheritDoc ElementVisitor} + * @return {@inheritDoc ElementVisitor} + * @since N + */ + @Override + public R visitPreviewFeature1(PreviewFeature1Element e, P p) { + return defaultAction(e, p); + }Добавление поддержки посетителей для конструкции языка, которая является новым типом существующей конструкции
Рассмотрим новую функцию языка, функцию превью 2, в JDK N. Эта функция имеет новый тип элемента без необходимости в новом интерфейсе элемента верхнего уровня для его моделирования. Конкретно, предположим, что функция превью 2 — это новый тип переменной; изменения будут аналогичными, если функция будет новым типом исполняемого кода или новым типом другой существующей конструкции верхнего уровня. В этом случае изменения API будут более ограниченными:// Sample diff for ElementKind.java + /** + * A preview feature 2. + * @since N + */ + PREVIEW_FEATURE_2, ... // Update existing methods as needed public boolean isVariable() { return switch(this) { case ENUM_CONSTANT, FIELD, PARAMETER, LOCAL_VARIABLE, EXCEPTION_PARAMETER, RESOURCE_VARIABLE, - BINDING_VARIABLE -> true; + BINDING_VARIABLE, PREVIEW_FEATURE_2 -> true; default -> false; }; }Посетители типа должны поддерживать новый вид элемента:// Update visitVariable in ElementKindVisitor6: ... * @implSpec This implementation dispatches to the visit method for * the specific {@linkplain ElementKind kind} of variable, {@code * ENUM_CONSTANT}, {@code EXCEPTION_PARAMETER}, {@code FIELD}, - * {@code LOCAL_VARIABLE}, {@code PARAMETER}, or {@code RESOURCE_VARIABLE}. + * {@code LOCAL_VARIABLE}, {@code PARAMETER}, {@code RESOURCE_VARIABLE}, + * or {@code PREVIEW_FEATURE_2}. * * @param e {@inheritDoc ElementVisitor} * @param p {@inheritDoc ElementVisitor} * @return the result of the kind-specific visit method */ @Override public R visitVariable(VariableElement e, P p) { ... case BINDING_VARIABLE: return visitVariableAsBindingVariable(e, p); + case PREVIEW_FEATURE_2: + return visitVariableAsPreviewFeature2(e, p); + default: throw new AssertionError("Bad kind " + k + " for VariableElement" + e); ... + /** + * Visits a {@code PREVIEW_FEATURE_2} variable element. + * + * @implSpec This implementation calls {@code visitUnknown}. + * + * @param e the element to visit + * @param p a visitor-specified parameter + * @return the result of {@code visitUnknown} + * + * @since N + */ + public R visitVariableAsPreviewFeature2(VariableElement e, P p) { + return visitUnknown(e, p); + }Посетитель превью типа элемента, в свою очередь, переопределяетvisitVariableAsPreviewFeature2:// Sample diff for ElementKindVisitorPreview: + /** + * {@inheritDoc ElementKindVisitor6} + * + * @implSpec This implementation calls {@code defaultAction}. + * + * @param e {@inheritDoc ElementKindVisitor6} + * @param p {@inheritDoc ElementKindVisitor6} + * @return the result of {@code defaultAction} + * + * @since N + */ + @Override + public R visitVariableAsPreviewFeature2(VariableElement e, P p) { + return defaultAction(e, p); + }Как и в случае введения нового интерфейса, когда функция превью 2 выходит из превью в JDK (N+k), будет добавлен набор посетителей для уровня языка (N+k). Методы, работающие с новой функцией в посетителях типа, будут перемещены из посетителей превью в посетителей нового уровня языка (N+k). Затем каждый посетитель превью будет изменен на прямой суперкласс соответствующего посетителя (N+k). - Конструкции превью языка имеют соответствующий новый интерфейс моделирования и сопутствующий новый константный тип, например, новая константа
- С:
- 1.6
- См. также:
| Класс | Описание |
|---|---|
|
AbstractAnnotationValueVisitor14<R, |
Скелетный посетитель для значений аннотаций с поведением по умолчанию, подходящим для версии исходного кода RELEASE_14. |
|
AbstractAnnotationValueVisitor6<R, |
Скелетный посетитель для значений аннотаций с поведением по умолчанию, подходящим для версии исходного кода RELEASE_6. |
|
AbstractAnnotationValueVisitor7<R, |
Скелетный посетитель для значений аннотаций с поведением по умолчанию, подходящим для версии исходного кода RELEASE_7. |
|
AbstractAnnotationValueVisitor8<R, |
Скелетный посетитель для значений аннотаций с поведением по умолчанию, подходящим для версии исходного кода RELEASE_8. |
|
AbstractAnnotationValueVisitor9<R, |
Скелетный посетитель для значений аннотаций с поведением по умолчанию, подходящим для версий исходного кода RELEASE_9 по RELEASE_14. |
|
AbstractAnnotationValueVisitorPreviewПРЕВЬЮ<R, |
Предварительная версия. Скелетный посетитель для значений аннотаций с поведением по умолчанию, подходящим для превью версии исходного кода. |
|
AbstractElementVisitor14<R, |
Скелетный посетитель элементов программы с поведением по умолчанию, подходящим для версии исходного кода RELEASE_14. |
|
AbstractElementVisitor6<R, |
Скелетный посетитель элементов программы с поведением по умолчанию, подходящим для версии исходного кода RELEASE_6. |
|
AbstractElementVisitor7<R, |
Скелетный посетитель элементов программы с поведением по умолчанию, подходящим для версии исходного кода RELEASE_7. |
|
AbstractElementVisitor8<R, |
Скелетный посетитель элементов программы с поведением по умолчанию, подходящим для версии исходного кода RELEASE_8. |
|
AbstractElementVisitor9<R, |
Скелетный посетитель элементов программы с поведением по умолчанию, подходящим для версий исходного кода RELEASE_9 по RELEASE_14. |
|
AbstractElementVisitorPreviewПРЕВЬЮ<R, |
Предварительная версия. Скелетный посетитель элементов программы с поведением по умолчанию, подходящим для превью версии исходного кода. |
|
AbstractTypeVisitor14<R, |
Скелетный посетитель типов с поведением по умолчанию, подходящим для версии исходного кода RELEASE_14. |
|
AbstractTypeVisitor6<R, |
Скелетный посетитель типов с поведением по умолчанию, подходящим для версии исходного кода RELEASE_6. |
|
AbstractTypeVisitor7<R, |
Скелетный посетитель типов с поведением по умолчанию, подходящим для версии исходного кода RELEASE_7. |
|
AbstractTypeVisitor8<R, |
Скелетный посетитель типов с поведением по умолчанию, подходящим для версии исходного кода RELEASE_8. |
|
AbstractTypeVisitor9<R, |
Скелетный посетитель типов с поведением по умолчанию, подходящим для версий исходного кода RELEASE_9 по RELEASE_14. |
|
AbstractTypeVisitorPreviewПРЕВЬЮ<R, |
Предварительная версия. Скелетный посетитель типов с поведением по умолчанию, подходящим для превью версии исходного кода. |
| ElementFilter | Фильтры для выбора только интересующих элементов из коллекции элементов. |
|
ElementKindVisitor14<R, |
Посетитель элементов программы на основе их типа с поведением по умолчанию, подходящим для версии исходного кода RELEASE_14. |
|
ElementKindVisitor6<R, |
|
|
ElementKindVisitor7<R, |
|
|
ElementKindVisitor8<R, |
|
|
ElementKindVisitor9<R, |
Посетитель элементов программы на основе их типа с поведением по умолчанию, подходящим для версий исходного кода RELEASE_9 по RELEASE_14. |
|
ElementKindVisitorPreviewПРЕВЬЮ<R, |
Предварительная версия. |
| Elements | Утилитарные методы для работы с элементами программы. |
| Elements.DocCommentKind | Вид документального комментария. |
| Elements.Origin | Источник элемента или другого элемента модели языка. |
|
ElementScanner14<R, |
Посетитель сканирования элементов программы с поведением по умолчанию, подходящим для версии исходного кода RELEASE_14. |
|
ElementScanner6<R, |
Посетитель сканирования элементов программы с поведением по умолчанию, подходящим для версии исходного кода RELEASE_6. |
|
ElementScanner7<R, |
A scanning visitor of program elements with default behavior appropriate for the RELEASE_7 source version. |
|
ElementScanner8<R, |
A scanning visitor of program elements with default behavior appropriate for the RELEASE_8 source version. |
|
ElementScanner9<R, |
A scanning visitor of program elements with default behavior appropriate for source versions RELEASE_9 through RELEASE_14. |
|
ElementScannerPreviewPREVIEW<R, |
Предварительный просмотр. A scanning visitor of program elements with default behavior appropriate for a preview source version. |
|
SimpleAnnotationValueVisitor14<R, |
A simple visitor for annotation values with default behavior appropriate for source version RELEASE_14. |
|
SimpleAnnotationValueVisitor6<R, |
A simple visitor for annotation values with default behavior appropriate for the RELEASE_6 source version. |
|
SimpleAnnotationValueVisitor7<R, |
A simple visitor for annotation values with default behavior appropriate for the RELEASE_7 source version. |
|
SimpleAnnotationValueVisitor8<R, |
A simple visitor for annotation values with default behavior appropriate for the RELEASE_8 source version. |
|
SimpleAnnotationValueVisitor9<R, |
A simple visitor for annotation values with default behavior appropriate for source versions RELEASE_9 through RELEASE_14. |
|
SimpleAnnotationValueVisitorPreviewPREVIEW<R, |
Предварительный просмотр. A simple visitor for annotation values with default behavior appropriate for a preview source version. |
|
SimpleElementVisitor14<R, |
A simple visitor of program elements with default behavior appropriate for the RELEASE_14 source version. |
|
SimpleElementVisitor6<R, |
A simple visitor of program elements with default behavior appropriate for the RELEASE_6 source version. |
|
SimpleElementVisitor7<R, |
A simple visitor of program elements with default behavior appropriate for the RELEASE_7 source version. |
|
SimpleElementVisitor8<R, |
A simple visitor of program elements with default behavior appropriate for the RELEASE_8 source version. |
|
SimpleElementVisitor9<R, |
A simple visitor of program elements with default behavior appropriate for source versions RELEASE_9 through RELEASE_14. |
|
SimpleElementVisitorPreviewPREVIEW<R, |
Предварительный просмотр. A simple visitor of program elements with default behavior appropriate for a preview source version. |
|
SimpleTypeVisitor14<R, |
A simple visitor of types with default behavior appropriate for source version RELEASE_14. |
|
SimpleTypeVisitor6<R, |
A simple visitor of types with default behavior appropriate for the RELEASE_6 source version. |
|
SimpleTypeVisitor7<R, |
A simple visitor of types with default behavior appropriate for the RELEASE_7 source version. |
|
SimpleTypeVisitor8<R, |
A simple visitor of types with default behavior appropriate for the RELEASE_8 source version. |
|
SimpleTypeVisitor9<R, |
A simple visitor of types with default behavior appropriate for source versions RELEASE_9 through RELEASE_14. |
|
SimpleTypeVisitorPreviewPREVIEW<R, |
Предварительный просмотр. A simple visitor of types with default behavior appropriate for a preview source version. |
|
TypeKindVisitor14<R, |
A visitor of types based on their kind with default behavior appropriate for source version RELEASE_14. |
|
TypeKindVisitor6<R, |
|
|
TypeKindVisitor7<R, |
|
|
TypeKindVisitor8<R, |
|
|
TypeKindVisitor9<R, |
A visitor of types based on their kind with default behavior appropriate for source versions RELEASE_9 through RELEASE_14. |
|
TypeKindVisitorPreviewPREVIEW<R, |
Предварительный просмотр. |
| Types | Утилитарные методы для работы с типами. |
© 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://download.java.net/java/early_access/jdk24/docs/api/java.compiler/javax/lang/model/util/package-summary.html