Spec-Zone.ru › OpenJDK 25

Класс ModuleDescriptor

java.lang.Object
java.lang.module.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
См. также:
  • Module

Краткое описание вложенных классов

Модификатор и тип Класс Описание
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<AccessFlag> accessFlags()
Возвращает множество флагов модуля.
int compareTo(ModuleDescriptor that)
Сравнивает этот дескриптор модуля с другим.
boolean equals(Object ob)
Проверяет, равен ли этот дескриптор модуля заданному объекту.
Set<ModuleDescriptor.Exports> exports()
Возвращает множество объектов Exports, представляющих экспортируемые пакеты.
int hashCode()
Вычисляет хеш-код этого дескриптора модуля.
boolean isAutomatic()
Возвращает true, если это автоматический модуль.
boolean isOpen()
Возвращает true, если это открытый модуль.
Optional<String> mainClass()
Возвращает главный класс модуля.
Set<ModuleDescriptor.Modifier> modifiers()
Возвращает множество модификаторов модуля.
String name()
Возвращает имя модуля.
static ModuleDescriptor.Builder newAutomaticModule(String name)
Создаёт экземпляр построителя для создания дескриптора автоматического модуля.
static ModuleDescriptor.Builder newModule(String name)
Создаёт экземпляр построителя для создания дескриптора обычного модуля.
static ModuleDescriptor.Builder newModule(String name, Set<ModuleDescriptor.Modifier> ms)
Создаёт экземпляр построителя для создания дескриптора модуля.
static ModuleDescriptor.Builder newOpenModule(String name)
Создаёт экземпляр построителя для создания дескриптора открытого модуля.
Set<ModuleDescriptor.Opens> opens()
Возвращает множество объектов Opens, представляющих открытые пакеты.
Set<String> packages()
Возвращает множество пакетов в модуле.
Set<ModuleDescriptor.Provides> provides()
Возвращает множество объектов Provides, представляющих службы, предоставляемые модулем.
Optional<String> rawVersion()
Возвращает строку с версией модуля, которая, возможно, не поддаётся разбору.
static ModuleDescriptor read(InputStream in)
Считывает двоичную форму объявления модуля из входного потока в виде дескриптора модуля.
static ModuleDescriptor read(InputStream in, Supplier<Set<String>> packageFinder)
Считывает двоичную форму объявления модуля из входного потока в виде дескриптора модуля.
static ModuleDescriptor read(ByteBuffer bb)
Считывает двоичную форму объявления модуля из байтового буфера в виде дескриптора модуля.
static ModuleDescriptor read(ByteBuffer bb, Supplier<Set<String>> packageFinder)
Считывает двоичную форму объявления модуля из байтового буфера в виде дескриптора модуля.
Set<ModuleDescriptor.Requires> requires()
Возвращает множество объектов Requires, представляющих зависимости модуля.
String toNameAndVersion()
Возвращает строку, содержащую имя модуля и, если она указана, его версию.
String toString()
Возвращает строку с описанием модуля.
Set<String> uses()
Возвращает множество зависимостей от служб.
Optional<ModuleDescriptor.Version> version()
Возвращает версию модуля.

Методы, объявленные в классе Object

clone, finalize, getClass, notify, notifyAll, wait, wait, wait

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

name

public String name()

Возвращает имя модуля.

Возвращает:
Имя модуля

modifiers

public Set<ModuleDescriptor.Modifier> modifiers()

Возвращает множество модификаторов модуля.

Возвращает:
Возможно, пустое неизменяемое множество модификаторов

accessFlags

public Set<AccessFlag> accessFlags()
Возвращает множество флагов модуля.
Возвращает:
Возможно, пустое неизменяемое множество флагов модуля
См. Спецификацию виртуальной машины Java:
4.7.25 Атрибут Module
С версии:
20
См. также:
  • modifiers()

isOpen

public boolean isOpen()

Возвращает true, если это открытый модуль.

Этот метод эквивалентен проверке того, содержит ли множество modifiers модификатор OPEN.

Возвращает:
true, если это открытый модуль

isAutomatic

public boolean isAutomatic()

Возвращает true, если это автоматический модуль.

Этот метод эквивалентен проверке того, содержит ли множество modifiers модификатор AUTOMATIC.

Возвращает:
true, если это автоматический модуль

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, если у модуля нет версии
См. также:
  • version()

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.

Переопределяет:
equals в классе Object
Параметры:
ob — объект, с которым сравнивается данный объект
Возвращает:
true тогда и только тогда, когда заданный объект является дескриптором модуля, равным этому дескриптору модуля
См. также:
  • Object.hashCode()
  • HashMap

hashCode

public int hashCode()
Вычисляет хеш-код этого дескриптора модуля.

Хеш-код основан на компонентах дескриптора модуля и соответствует общему контракту метода Object.hashCode.

Переопределяет:
hashCode в классе Object
Возвращает:
Значение хеш-кода этого дескриптора модуля
См. также:
  • Object.equals(java.lang.Object)
  • System.identityHashCode(Object)

toString

public String toString()

Возвращает строку с описанием модуля.

Переопределяет:
toString в классе Object
Возвращает:
Строку с описанием модуля

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 или не является допустимым именем модуля
См. также:
  • ModuleFinder.of(Path[])

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 — если обнаружен недопустимый дескриптор модуля

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по 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.base/java/lang/module/ModuleDescriptor.html

Spec-Zone.ru

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