Класс ModuleDescriptor
- Все реализуемые интерфейсы:
Comparable<ModuleDescriptor>
public final class ModuleDescriptor extends Object implements Comparable<ModuleDescriptor>
Дескриптор модуля описывает именованный модуль и определяет методы для получения каждого из его компонентов. Дескриптор модуля для именованного модуля в виртуальной машине Java получают вызовом метода Module getDescriptor. Дескрипторы модулей также можно создать с помощью класса ModuleDescriptor.Builder или прочитать двоичную форму объявления модуля (module-info.class) с помощью определённых здесь методов read.
Дескриптор модуля описывает обычный, открытый или автоматический модуль. Обычные и открытые модули описывают свои зависимости, exported-packages, службы, которые они используют или предоставляют, а также другие компоненты. Обычные модули могут открывать определённые пакеты. Дескриптор открытого модуля не объявляет открытых пакетов (его метод opens возвращает пустое множество), однако при создании экземпляра такого модуля в виртуальной машине Java он рассматривается так, как если бы все пакеты были открыты. Дескриптор автоматического модуля не объявляет зависимостей (кроме обязательной зависимости от
java.base) и не объявляет экспортируемых или открытых пакетов. При разрешении зависимостей автоматические модули обрабатываются особым образом, благодаря чему они читают все остальные модули в конфигурации. При создании экземпляра автоматического модуля в виртуальной машине Java он читает каждый безымянный модуль и рассматривается так, как если бы все пакеты были экспортированы и открыты.
Объекты ModuleDescriptor неизменяемы и безопасны для использования несколькими параллельно работающими потоками.
- С версии:
- 9
- См. также:
Краткое описание вложенных классов
| Модификатор и тип | Класс | Описание |
|---|---|---|
static final class |
ModuleDescriptor.Builder |
Построитель для создания объектов ModuleDescriptor. |
static final class |
ModuleDescriptor.Exports |
Пакет, экспортируемый модулем; экспорт может быть квалифицированным или неквалифицированным. |
static enum |
ModuleDescriptor.Modifier |
Модификатор модуля. |
static final class |
ModuleDescriptor.Opens |
Пакет, открытый модулем; открытие может быть квалифицированным или неквалифицированным. |
static final class |
ModuleDescriptor.Provides |
Служба, для которой модуль предоставляет одну или несколько реализаций. |
static final class |
ModuleDescriptor.Requires |
Зависимость от модуля. |
static final class |
ModuleDescriptor.Version |
Строка версии модуля. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Set |
accessFlags() |
Возвращает множество флагов модуля. |
int |
compareTo |
Сравнивает этот дескриптор модуля с другим. |
boolean |
equals |
Проверяет, равен ли этот дескриптор модуля заданному объекту. |
Set |
exports() |
Возвращает множество объектов Exports, представляющих экспортируемые пакеты. |
int |
hashCode() |
Вычисляет хеш-код этого дескриптора модуля. |
boolean |
isAutomatic() |
Возвращает true, если это автоматический модуль. |
boolean |
isOpen() |
Возвращает true, если это открытый модуль. |
Optional |
mainClass() |
Возвращает главный класс модуля. |
Set |
modifiers() |
Возвращает множество модификаторов модуля. |
String |
name() |
Возвращает имя модуля. |
static ModuleDescriptor.Builder |
newAutomaticModule |
Создаёт экземпляр построителя для создания дескриптора автоматического модуля. |
static ModuleDescriptor.Builder |
newModule |
Создаёт экземпляр построителя для создания дескриптора обычного модуля. |
static ModuleDescriptor.Builder |
newModule |
Создаёт экземпляр построителя для создания дескриптора модуля. |
static ModuleDescriptor.Builder |
newOpenModule |
Создаёт экземпляр построителя для создания дескриптора открытого модуля. |
Set |
opens() |
Возвращает множество объектов Opens, представляющих открытые пакеты. |
Set |
packages() |
Возвращает множество пакетов в модуле. |
Set |
provides() |
Возвращает множество объектов Provides, представляющих службы, предоставляемые модулем. |
Optional |
rawVersion() |
Возвращает строку с версией модуля, которая, возможно, не поддаётся разбору. |
static ModuleDescriptor |
read |
Считывает двоичную форму объявления модуля из входного потока в виде дескриптора модуля. |
static ModuleDescriptor |
read |
Считывает двоичную форму объявления модуля из входного потока в виде дескриптора модуля. |
static ModuleDescriptor |
read |
Считывает двоичную форму объявления модуля из байтового буфера в виде дескриптора модуля. |
static ModuleDescriptor |
read |
Считывает двоичную форму объявления модуля из байтового буфера в виде дескриптора модуля. |
Set |
requires() |
Возвращает множество объектов Requires, представляющих зависимости модуля. |
String |
toNameAndVersion() |
Возвращает строку, содержащую имя модуля и, если она указана, его версию. |
String |
toString() |
Возвращает строку с описанием модуля. |
Set |
uses() |
Возвращает множество зависимостей от служб. |
Optional |
version() |
Возвращает версию модуля. |
Подробное описание методов
name
public String name()
Возвращает имя модуля.
- Возвращает:
- Имя модуля
modifiers
public Set<ModuleDescriptor.Modifier> modifiers()
Возвращает множество модификаторов модуля.
- Возвращает:
- Возможно, пустое неизменяемое множество модификаторов
accessFlags
public Set<AccessFlag> accessFlags()
- Возвращает:
- Возможно, пустое неизменяемое множество флагов модуля
- См. Спецификацию виртуальной машины Java:
- 4.7.25 Атрибут Module
- С версии:
- 20
- См. также:
isOpen
isAutomatic
requires
public Set<ModuleDescriptor.Requires> requires()
Возвращает множество объектов Requires, представляющих зависимости модуля.
Множество включает зависимость от "java.base", если имя этого модуля не равно "java.base". Если этот модуль является автоматическим, он не зависит ни от одного модуля, кроме "java.base".
- Возвращает:
- Возможно, пустое неизменяемое множество объектов
ModuleDescriptor.Requires
exports
public Set<ModuleDescriptor.Exports> exports()
Возвращает множество объектов Exports, представляющих экспортируемые пакеты.
Если этот модуль является автоматическим, множество экспортируемых пакетов пусто.
- Возвращает:
- Возможно, пустое неизменяемое множество экспортируемых пакетов
opens
public Set<ModuleDescriptor.Opens> opens()
Возвращает множество объектов Opens, представляющих открытые пакеты.
Если этот модуль является открытым или автоматическим, множество открытых пакетов пусто.
- Возвращает:
- Возможно, пустое неизменяемое множество открытых пакетов
uses
public Set<String> uses()
Возвращает множество зависимостей от служб.
Если этот модуль является автоматическим, множество зависимостей от служб пусто.
- Возвращает:
- Возможно, пустое неизменяемое множество двоичных имён используемых типов служб
provides
public Set<ModuleDescriptor.Provides> provides()
Возвращает множество объектов Provides, представляющих службы, предоставляемые модулем.
- Возвращает:
- Возможно, пустое неизменяемое множество служб, предоставляемых этим модулем
version
public Optional<ModuleDescriptor.Version> version()
Возвращает версию модуля.
- Возвращает:
- Версию этого модуля или пустой объект
Optional, если у модуля нет версии или её невозможно разобрать
rawVersion
public Optional<String> rawVersion()
Возвращает строку с версией модуля, которая, возможно, не поддаётся разбору.
- Возвращает:
- Строку с версией модуля или пустой объект
Optional, если у модуля нет версии - См. также:
toNameAndVersion
public String toNameAndVersion()
Возвращает строку, содержащую имя модуля и, если она указана, его версию.
- Возвращает:
- Строку, содержащую имя модуля и, если она указана, его версию
mainClass
public Optional<String> mainClass()
Возвращает главный класс модуля.
- Возвращает:
- Двоичное имя главного класса модуля
packages
public Set<String> packages()
Множество пакетов включает все экспортируемые и открытые пакеты, а также пакеты любых поставщиков служб и пакет главного класса.
- Возвращает:
- Возможно, пустое неизменяемое множество пакетов в модуле
compareTo
public int compareTo(ModuleDescriptor that)
Объекты ModuleDescriptor сравниваются по именам модулей в лексикографическом порядке. Если имена модулей совпадают, сравниваются версии модулей. При сравнении версий дескриптор модуля с версией считается следующим за дескриптором модуля без версии. Если обе версии не поддаются разбору, лексикографически сравниваются исходные строки версий. Если имена модулей совпадают, а версии равны (или отсутствуют в обоих дескрипторах), сравниваются множества модификаторов. Множества модификаторов сравниваются по двоичному значению, вычисленному для каждого множества. Если модификатор присутствует в множестве, бит в позиции его порядкового номера в двоичном значении равен 1, в противном случае — 0. Если множества модификаторов также равны, остальные компоненты дескрипторов модулей сравниваются способом, согласующимся с equals.
- Определено в:
-
compareToв интерфейсеComparable<ModuleDescriptor> - Параметры:
-
that— дескриптор модуля для сравнения - Возвращает:
- Отрицательное целое число, ноль или положительное целое число, если этот дескриптор модуля меньше, равен или больше заданного дескриптора модуля
equals
public boolean equals(Object ob)
Если заданный объект не является ModuleDescriptor, этот метод возвращает false. Два дескриптора модулей равны, если равны все их соответствующие компоненты.
Этот метод соответствует общему контракту метода Object.equals.
hashCode
public int hashCode()
Хеш-код основан на компонентах дескриптора модуля и соответствует общему контракту метода Object.hashCode.
toString
newModule
public static ModuleDescriptor.Builder newModule(String name, Set<ModuleDescriptor.Modifier> ms)
- Параметры:
-
name— имя модуля -
ms— множество модификаторов модуля - Возвращает:
- Новый построитель
- Выбрасывает:
-
IllegalArgumentException— если имя модуля равноnullили не является допустимым именем модуля либо множество модификаторов содержитAUTOMATICвместе с другими модификаторами
newModule
public static ModuleDescriptor.Builder newModule(String name)
newModule с пустым множеством modifiers.- Параметры:
-
name— имя модуля - Возвращает:
- Новый построитель
- Выбрасывает:
-
IllegalArgumentException— если имя модуля равноnullили не является допустимым именем модуля
newOpenModule
public static ModuleDescriptor.Builder newOpenModule(String name)
newModule с модификатором OPEN. Построитель открытого модуля нельзя использовать для объявления открытых пакетов.
- Параметры:
-
name— имя модуля - Возвращает:
- Новый построитель, создающий открытый модуль
- Выбрасывает:
-
IllegalArgumentException— если имя модуля равноnullили не является допустимым именем модуля
newAutomaticModule
public static ModuleDescriptor.Builder newAutomaticModule(String name)
newModule с модификатором AUTOMATIC. Построитель автоматического модуля не может использоваться для объявления зависимостей модулей или служб. Его также нельзя использовать для объявления экспортируемых или открытых пакетов.
- Параметры:
-
name— имя модуля - Возвращает:
- Новый построитель, создающий автоматический модуль
- Выбрасывает:
-
IllegalArgumentException— если имя модуля равноnullили не является допустимым именем модуля - См. также:
read
public static ModuleDescriptor read(InputStream in, Supplier<Set<String>> packageFinder) throws IOException
Если дескриптор, закодированный во входном потоке, не содержит сведений о множестве пакетов модуля, будет вызван packageFinder. Множество пакетов, возвращаемое packageFinder, должно включать все пакеты, которые модуль экспортирует или открывает, а также пакеты реализаций служб, предоставляемых модулем, и пакет главного класса (если у модуля есть главный класс). Если packageFinder выбрасывает UncheckedIOException, будет повторно выброшено исключение IOException, указанное в качестве причины.
Если за дескриптором модуля следуют байты, то реализация определяет, будут ли эти байты считаны, проигнорированы или приведут к сообщению об ошибке InvalidModuleDescriptorException. Если этот метод завершается ошибкой InvalidModuleDescriptorException или
IOException, это может произойти после считывания части, но не всех байтов из входного потока. Настоятельно рекомендуется незамедлительно закрыть и отбросить поток, если возникло исключение.
- Примечание к API:
- Параметр
packageFinderпредназначен для чтения дескрипторов модулей из устаревших форматов артефактов модулей, в которых множество пакетов не записывается непосредственно в дескрипторе. - Параметры:
-
in— входной поток -
packageFinder— поставщик, способный предоставить множество пакетов - Возвращает:
- Дескриптор модуля
- Выбрасывает:
-
InvalidModuleDescriptorException— если обнаружен недопустимый дескриптор модуля или множество пакетов, возвращённое объектомpackageFinder, не включает все пакеты, полученные из дескриптора модуля -
IOException— если при чтении входного потока возникает ошибка ввода-вывода или поставщик пакетов выбрасываетUncheckedIOException
read
public static ModuleDescriptor read(InputStream in) throws IOException
read с двумя аргументами, за исключением того, что средство поиска пакетов не используется для поиска дополнительных пакетов, когда дескриптор модуля, считанный из потока, не содержит сведений о множестве пакетов.- Параметры:
-
in— входной поток - Возвращает:
- Дескриптор модуля
- Выбрасывает:
-
InvalidModuleDescriptorException— если обнаружен недопустимый дескриптор модуля -
IOException— если при чтении входного потока возникает ошибка ввода-вывода
read
public static ModuleDescriptor read(ByteBuffer bb, Supplier<Set<String>> packageFinder)
Если дескриптор, закодированный в байтовом буфере, не содержит сведений о множестве пакетов модуля, будет вызван packageFinder. Множество пакетов, возвращаемое packageFinder, должно включать все пакеты, которые модуль экспортирует или открывает, а также пакеты реализаций служб, предоставляемых модулем, и пакет главного класса (если у модуля есть главный класс). Если packageFinder выбрасывает UncheckedIOException, будет повторно выброшено исключение IOException, указанное в качестве причины.
Дескриптор модуля считывается из буфера начиная с индекса p, где p — значение position буфера на момент вызова этого метода. По возвращении позиция буфера будет равна p + n, где n — количество байтов, считанных из буфера.
Если за дескриптором модуля следуют байты, то реализация определяет, будут ли эти байты считаны, проигнорированы или приведут к сообщению об ошибке InvalidModuleDescriptorException. Если этот метод завершается ошибкой InvalidModuleDescriptorException, это может произойти после считывания части, но не всех байтов.
- Примечание к API:
- Параметр
packageFinderпредназначен для чтения дескрипторов модулей из устаревших форматов артефактов модулей, в которых множество пакетов не записывается непосредственно в дескрипторе. - Параметры:
-
bb— байтовый буфер -
packageFinder— поставщик, способный предоставить множество пакетов - Возвращает:
- Дескриптор модуля
- Выбрасывает:
-
InvalidModuleDescriptorException— если обнаружен недопустимый дескриптор модуля или множество пакетов, возвращённое объектомpackageFinder, не включает все пакеты, полученные из дескриптора модуля
read
public static ModuleDescriptor read(ByteBuffer bb)
read с двумя аргументами, за исключением того, что средство поиска пакетов не используется для поиска дополнительных пакетов, когда дескриптор модуля, закодированный в буфере, не содержит сведений о множестве пакетов.- Параметры:
-
bb— байтовый буфер - Возвращает:
- Дескриптор модуля
- Выбрасывает:
-
InvalidModuleDescriptorException— если обнаружен недопустимый дескриптор модуля
© 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.base/java/lang/module/ModuleDescriptor.html