Пакет javax.lang.model
Эта модель языка использует дизайн на основе зеркал; см.
Гилад Браха и Дэвид Унгар. Зеркала: Принципы проектирования метауровневых средств объектно-ориентированных языков программирования. В Proc. of the ACM Conf. on Object-Oriented Programming, Systems, Languages and Applications, октябрь 2004.В частности, модель различает объявленные языковые конструкции, такие как элемент element, представляющий
java.util.Set, и семейство типов, которые могут быть связаны с элементом, такими как исходный тип java.util.Set,
java.util.Set<String> и java.util.Set<T>. Если не указано иное, методы в этом пакете будут выбрасывать NullPointerException, если получат null аргумент.
Элементы и типы
Определения и использования
В широком смысле пакетelement моделирует объявления, то есть определения элементов, а пакет type моделирует использование типов. В целом, различные использования могут иметь индивидуальную информацию, отличную от информации, связанной с определением. В некотором смысле информация в определении делится всеми использованиями. Например, рассмотрим использование
java.lang.String в методе обработки строк
identityOrEmpty ниже:
// Return the argument if it is non-null and the empty string otherwise.
public static @DefinitelyNotNull String identityOrEmpty(@MightBeNull String argument) {
...
}
String, снабжённым аннотацией типа @DefinitelyNotNull, в то время как тип параметра является String, снабжённым аннотацией типа
@MightBeNull. В рефлексивном API, поскольку набор аннотаций отличается для двух использований
String как типа, тип возвращаемого значения и тип аргумента должны быть представлены различными объектами, чтобы различать эти два случая. Определение самого java.lang.String не содержит ни одной из рассматриваемых аннотаций типа. Еще один пример, рассмотрим объявление обобщённого интерфейса (JLS 9.1.2) java.util.Set, имеющего один параметр типа. Это объявление захватывает общность между множеством параметризованных типов (JLS 4.5), полученных из этого объявления, таких как java.util.Set<String>,
java.util.Set<E>, java.util.Set<?>, а также необработанного типа (JLS 4.8) java.util.Set.
Сопоставление между элементами и типами
Хотя это отдельные понятия, между элементами и типами, между определениями и использованиями существуют двусторонние (частичные) соответствия. Например, грубо говоря, информацию, которая будет неизменной для всех применений типа, можно получить из элемента, определяющего тип. Например, рассмотритеDeclaredType тип, моделирующий использование java.lang.String. Вызов DeclaredType.asElement() вернёт TypeElement для
java.lang.String. Из TypeElement можно получить общую информацию, такую как имя и модификаторы. Все элементы могут быть отображены в какой-то тип. Элементы для классов и интерфейсов отображаются в прототипический тип. Обратно, в общем случае, многие типы могут отображаться на один и тот же элемент типа. Например, зеркальное отображение типа исходного типа java.util.Set, прототипического типа java.util.Set<E> и типа
java.util.Set<String> будут отображены в элемент типа java.util.Set. Несколько видов типов могут быть отображены на элементы, но другие виды типов не имеют отображения на элемент. Например, зеркальное отображение типа выполнимого кода не имеет отображения на элемент, в то время как объявленный тип отображается на элемент типа, как описано выше.
- Since:
- 1.6
- См. также:
| Класс | Описание |
|---|---|
| AnnotatedConstruct | Представляет собой конструкцию, которая может быть аннотирована. |
| SourceVersion | Версии исходных кодов языка программирования Java. |
| UnknownEntityException | Базовый класс исключений, которые указывают на то, что был встречен неизвестный тип сущности. |
© 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/package-summary.html