Spec-Zone.ru › OpenJDK 27

Класс Module

java.lang.Object
java.lang.Module
Все реализованные интерфейсы:
AnnotatedElement
public final class Module extends Object implements AnnotatedElement
Представляет модуль времени выполнения — named или безымянный.

Именованные модули имеют name и создаются виртуальной машиной Java, когда ей задается граф модулей для создания слоя модулей.

Безымянный модуль не имеет имени. Для каждого ClassLoader существует безымянный модуль, который можно получить, вызвав его метод getUnnamedModule. Все типы, не входящие в именованный модуль, являются членами безымянного модуля своего загрузчика классов.

Имена пакетов, передаваемые в качестве аргументов методам этого класса или возвращаемые ими, являются полными именами пакетов, определенными в разделе §6.5.3 Спецификации языка Java, например, "java.lang".

Если не указано иное, передача аргумента null методу этого класса приводит к выбрасыванию NullPointerException.

См. Спецификацию языка Java:
7.7 Объявления модулей
Начиная с версии:
9
См. также:
  • Class.getModule()

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

Модификатор и тип Метод Описание
Module addExports(String pn, Module other)
Если модуль вызывающего кода — это данный модуль, обновляет данный модуль, чтобы экспортировать указанный пакет в указанный модуль.
Module addOpens(String pn, Module other)
Если данный модуль открыл указанный пакет по крайней мере для модуля вызывающего кода, обновляет данный модуль, чтобы открыть пакет также для указанного модуля.
Module addReads(Module other)
Если модуль вызывающего кода — это данный модуль, обновляет данный модуль, чтобы он читал указанный модуль.
Module addUses(Class<?> service)
Если модуль вызывающего кода — это данный модуль, обновляет данный модуль, добавляя зависимость от службы, соответствующую указанному типу службы.
boolean canRead(Module other)
Указывает, читает ли данный модуль указанный модуль.
boolean canUse(Class<?> service)
Указывает, имеет ли данный модуль зависимость от службы, соответствующую указанному типу службы.
<T extends Annotation>
T
getAnnotation(Class<T> annotationClass)
Возвращает аннотацию этого элемента указанного типа, если такая аннотация присутствует, иначе возвращает null.
Annotation[] getAnnotations()
Возвращает аннотации, присутствующие у этого элемента.
ClassLoader getClassLoader()
Возвращает ClassLoader этого модуля.
Annotation[] getDeclaredAnnotations()
Возвращает аннотации, непосредственно присутствующие у этого элемента.
ModuleDescriptor getDescriptor()
Возвращает дескриптор этого модуля или null, если данный модуль является безымянным.
ModuleLayer getLayer()
Возвращает слой модулей, содержащий данный модуль, или null, если данный модуль не входит в слой модулей.
String getName()
Возвращает имя модуля или null, если данный модуль является безымянным.
Set<String> getPackages()
Возвращает набор имен пакетов, входящих в данный модуль.
InputStream getResourceAsStream(String name)
Возвращает входной поток для чтения ресурса в этом модуле.
boolean isExported(String pn)
Возвращает true, если данный модуль безусловно экспортирует указанный пакет.
boolean isExported(String pn, Module other)
Возвращает true, если данный модуль экспортирует указанный пакет по крайней мере в указанный модуль.
boolean isNamed()
Возвращает true, если данный модуль является именованным.
boolean isNativeAccessEnabled()
Возвращает true, если данный модуль может обращаться к ограниченным методам.
boolean isOpen(String pn)
Возвращает true, если данный модуль безусловно открыл пакет.
boolean isOpen(String pn, Module other)
Возвращает true, если данный модуль открыл пакет по крайней мере для указанного модуля.
String toString()
Возвращает строковое представление данного модуля.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, «равен» ли этот объект другому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии.
Финализация объявлена устаревшей и будет удалена в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо истечения определенного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо истечения определенного промежутка реального времени.

Методы, объявленные в интерфейсе AnnotatedElement

getAnnotationsByType, getDeclaredAnnotation, getDeclaredAnnotationsByType, isAnnotationPresent
Модификатор и тип Метод Описание
default <T extends Annotation>
T[]
getAnnotationsByType(Class<T> annotationClass)
Возвращает аннотации, связанные с этим элементом.
default <T extends Annotation>
T
getDeclaredAnnotation(Class<T> annotationClass)
Возвращает аннотацию этого элемента указанного типа, если такая аннотация присутствует непосредственно, иначе возвращает null.
default <T extends Annotation>
T[]
getDeclaredAnnotationsByType(Class<T> annotationClass)
Возвращает аннотации этого элемента указанного типа, если они присутствуют непосредственно или косвенно.
default boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
Возвращает true, если аннотация указанного типа присутствует у этого элемента, иначе false.

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

isNamed

public boolean isNamed()
Возвращает true, если этот модуль является именованным модулем.
Возвращает:
true, если это именованный модуль
См. Спецификацию языка Java:
7.7.5 Безымянные модули
См. также:
  • ClassLoader.getUnnamedModule()

getName

public String getName()
Возвращает имя модуля или null, если этот модуль является безымянным.
Возвращает:
Имя модуля

getClassLoader

public ClassLoader getClassLoader()
Возвращает ClassLoader этого модуля.
Возвращает:
Загрузчик классов этого модуля

getDescriptor

public ModuleDescriptor getDescriptor()
Возвращает дескриптор этого модуля или null, если этот модуль является безымянным.
Возвращает:
Дескриптор этого модуля

getLayer

public ModuleLayer getLayer()
Возвращает слой модулей, содержащий этот модуль, или null, если этот модуль не входит в слой модулей. Слой модулей содержит именованные модули, поэтому при вызове для безымянного модуля этот метод всегда возвращает null.

Динамические модули — это именованные модули, создаваемые во время выполнения. Динамический модуль может входить в слой модулей, а может и не входить.

Возвращает:
Слой модулей, содержащий этот модуль
См. также:
  • Proxy

isNativeAccessEnabled

public boolean isNativeAccessEnabled()
Возвращает true, если этот модуль может обращаться к ограниченным методам.
Возвращает:
true, если этот модуль может обращаться к ограниченным методам.
Начиная с версии:
22

canRead

public boolean canRead(Module other)
Указывает, читает ли этот модуль указанный модуль. При вызове для проверки того, читает ли этот модуль сам себя, метод возвращает true. Он также возвращает true при вызове для безымянного модуля (поскольку безымянные модули читают все модули).
Параметры:
other — другой модуль
Возвращает:
true, если этот модуль читает other
См. также:
  • addReads(Module)

addReads

public Module addReads(Module other)
Если модуль вызывающего кода является этим модулем, добавляет этому модулю возможность читать указанный модуль. Этот метод ничего не делает, если other — это данный модуль (все модули читают сами себя), если этот модуль является безымянным (безымянные модули читают все модули) или если этот модуль уже читает other.
Примечание по реализации:
Рёбра чтения, добавленные этим методом, являются слабыми и не препятствуют сборке мусора для other, если этот модуль доступен через сильную ссылку.
Параметры:
other — другой модуль
Возвращает:
этот модуль
Исключения:
IllegalCallerException — если это именованный модуль, а модуль вызывающего кода не является этим модулем
См. также:
  • canRead(Module)

isExported

public boolean isExported(String pn, Module other)
Возвращает true, если этот модуль экспортирует указанный пакет как минимум указанному модулю.

При вызове для проверки того, экспортируется ли пакет этого модуля самому этому модулю, метод возвращает true. При вызове для безымянного модуля он всегда возвращает true. Пакет, open для указанного модуля, во время выполнения считается экспортируемым этому модулю, поэтому метод возвращает true, если пакет открыт для указанного модуля.

Этот метод не проверяет, читает ли указанный модуль данный модуль.

Параметры:
pn — имя пакета
other — другой модуль
Возвращает:
true, если этот модуль экспортирует пакет как минимум указанному модулю
См. также:
  • ModuleDescriptor.exports()
  • addExports(String,Module)

isOpen

public boolean isOpen(String pn, Module other)
Возвращает true, если этот модуль открыл пакет как минимум указанному модулю.

При вызове для проверки того, открыт ли пакет этого модуля самому этому модулю, метод возвращает true. При вызове для open модуля с пакетом в модуле он возвращает true. При вызове для безымянного модуля он всегда возвращает true.

Этот метод не проверяет, читает ли указанный модуль данный модуль.

Примечание по API:
Пакет, p открытый модулю M, позволяет коду в M выполнять глубокую рефлексию для всех типов в пакете. Кроме того, если M читает этот модуль, он может получить объект Lookup, которому разрешено define classes в пакете p.
Параметры:
pn — имя пакета
other — другой модуль
Возвращает:
true, если этот модуль открыл пакет как минимум указанному модулю
См. также:
  • ModuleDescriptor.opens()
  • addOpens(String,Module)
  • AccessibleObject.setAccessible(boolean)
  • MethodHandles.privateLookupIn(Class, MethodHandles.Lookup)

isExported

public boolean isExported(String pn)
Возвращает true, если этот модуль безусловно экспортирует указанный пакет.

При вызове для безымянного модуля этот метод всегда возвращает true. Пакет, безусловно opened, во время выполнения считается безусловно экспортируемым, поэтому метод возвращает true, если пакет безусловно открыт.

Этот метод не проверяет, читает ли указанный модуль данный модуль.

Параметры:
pn — имя пакета
Возвращает:
true, если этот модуль безусловно экспортирует пакет
См. также:
  • ModuleDescriptor.exports()

isOpen

public boolean isOpen(String pn)
Возвращает true, если этот модуль безусловно открыл пакет.

При вызове для безымянного модуля этот метод всегда возвращает true. Кроме того, при вызове для open модуля с пакетом в модуле он всегда возвращает true.

Этот метод не проверяет, читает ли указанный модуль данный модуль.

Примечание по API:
Пакет, p открытый модулю M, позволяет коду в M выполнять глубокую рефлексию для всех типов в пакете. Кроме того, если M читает этот модуль, он может получить объект Lookup, которому разрешено define classes в пакете p.
Параметры:
pn — имя пакета
Возвращает:
true, если этот модуль безусловно открыл пакет
См. также:
  • ModuleDescriptor.opens()
  • AccessibleObject.setAccessible(boolean)
  • MethodHandles.privateLookupIn(Class, MethodHandles.Lookup)

addExports

public Module addExports(String pn, Module other)
Если модуль вызывающего кода является этим модулем, добавляет этому модулю возможность экспортировать указанный пакет указанному модулю.

Экспорт пакета этим методом не позволяет указанному модулю рефлексивно задавать или получать дескриптор метода с доступом на запись к общедоступному полю final, объявленному в общедоступном классе этого пакета.

Этот метод не действует, если пакет уже экспортируется (или открыт) указанному модулю.

Примечание по API:
Как указано в разделе §5.4.3 Спецификации виртуальной машины Java, если попытка разрешить символьную ссылку завершается неудачей из-за ошибки связывания, все последующие попытки разрешить эту ссылку также завершаются с той же ошибкой, которая возникла при первой попытке разрешения.
Параметры:
pn — имя пакета
other — модуль
Возвращает:
этот модуль
Исключения:
IllegalArgumentException — если pn равно null или если это именованный модуль, а пакет pn не является пакетом этого модуля
IllegalCallerException — если это именованный модуль, а модуль вызывающего кода не является этим модулем
См. Спецификацию виртуальной машины Java:
5.4.3 Разрешение
См. также:
  • isExported(String,Module)

addOpens

public Module addOpens(String pn, Module other)
Если этот модуль открыл указанный пакет как минимум модулю вызывающего кода, добавляет этому модулю возможность открыть пакет и указанному модулю.

Открытие пакета этим методом позволяет указанному модулю выполнять рефлексию для всех типов в пакете и всех их членов, а не только для общедоступных типов и их общедоступных членов, используя API, которые поддерживают закрытый доступ или позволяют обойти либо отключить проверки контроля доступа языка Java.

Открытие пакета этим методом не позволяет указанному модулю рефлексивно задавать или получать дескриптор метода с доступом на запись к полю final, объявленному в классе этого пакета.

Этот метод не действует, если пакет уже открыт указанному модулю.

Примечание по API:
Этот метод можно использовать в случаях, когда модуль-потребитель открывает пакет с квалификатором opens для модуля API, но рефлексивный доступ к членам классов в модуле-потребителе делегируется коду другого модуля. Код модуля API может использовать этот метод, чтобы открыть пакет в модуле-потребителе для другого модуля.
Параметры:
pn — имя пакета
other — модуль
Возвращает:
этот модуль
Исключения:
IllegalArgumentException — если pn равно null или если это именованный модуль, а пакет pn не является пакетом этого модуля
IllegalCallerException — если это именованный модуль и этот модуль не открыл пакет как минимум модулю вызывающего кода
См. также:
  • isOpen(String,Module)
  • AccessibleObject.setAccessible(boolean)
  • MethodHandles.privateLookupIn(Class, MethodHandles.Lookup)

addUses

public Module addUses(Class<?> service)
Если модуль вызывающего кода является этим модулем, добавляет этому модулю зависимость от указанного типа службы. Этот метод предназначен для использования платформами, которые вызывают ServiceLoader от имени других модулей или которым другой код передаёт ссылку на тип службы. При вызове для безымянного или автоматического модуля этот метод ничего не делает.

Этот метод не приводит к повторному запуску resolveAndBind.

Параметры:
service — тип службы
Возвращает:
этот модуль
Исключения:
IllegalCallerException — если это именованный модуль, а модуль вызывающего кода не является этим модулем
См. также:
  • canUse(Class)
  • ModuleDescriptor.uses()

canUse

public boolean canUse(Class<?> service)
Указывает, имеет ли этот модуль зависимость от указанного типа службы. При вызове для безымянного или автоматического модуля этот метод всегда возвращает true.
Параметры:
service — тип службы
Возвращает:
true, если этот модуль использует тип службы st
См. также:
  • addUses(Class)

getPackages

public Set<String> getPackages()
Возвращает множество имён пакетов, входящих в этот модуль.

Для именованных модулей возвращаемое множество содержит по одному элементу для каждого пакета модуля.

Для безымянных модулей возвращаемое множество содержит по одному элементу для каждого пакета, который has been defined в безымянном модуле.

Возвращает:
множество имён пакетов, входящих в этот модуль

getAnnotation

public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
Возвращает аннотацию этого элемента указанного типа, если такая аннотация присутствует, иначе — null. При вызове для безымянного модуля этот метод возвращает null.

Обратите внимание, что любая аннотация, возвращённая этим методом, является аннотацией объявления.

Определено в:
getAnnotation в интерфейсе AnnotatedElement
Параметры типа:
T — тип аннотации, которую нужно найти и вернуть, если она присутствует
Параметры:
annotationClass — объект Class, соответствующий типу аннотации
Возвращает:
аннотацию этого элемента указанного типа, если она присутствует у этого элемента, иначе — null

getAnnotations

public Annotation[] getAnnotations()
Возвращает аннотации, присутствующие у этого элемента. Если у этого элемента нет присутствующих аннотаций, возвращается массив длины 0. Вызывающий этот метод код может изменять возвращённый массив; это не повлияет на массивы, возвращаемые другим вызывающим кодом. При вызове для безымянного модуля этот метод возвращает пустой массив.

Обратите внимание, что любые аннотации, возвращённые этим методом, являются аннотациями объявления.

Определено в:
getAnnotations в интерфейсе AnnotatedElement
Возвращает:
аннотации, присутствующие у этого элемента

getDeclaredAnnotations

public Annotation[] getDeclaredAnnotations()
Возвращает аннотации, непосредственно присутствующие у этого элемента. Этот метод игнорирует унаследованные аннотации. Если у этого элемента нет непосредственно присутствующих аннотаций, возвращается массив длины 0. Вызывающий этот метод код может изменять возвращённый массив; это не повлияет на массивы, возвращаемые другим вызывающим кодом. При вызове для безымянного модуля этот метод возвращает пустой массив.

Обратите внимание, что любые аннотации, возвращённые этим методом, являются аннотациями объявления.

Определено в:
getDeclaredAnnotations в интерфейсе AnnotatedElement
Возвращает:
аннотации, непосредственно присутствующие у этого элемента

getResourceAsStream

public InputStream getResourceAsStream(String name) throws IOException
Возвращает входной поток для чтения ресурса в этом модуле. Параметр name — это имя пути с разделителями '/', указывающее на ресурс. Как и Class.getResourceAsStream, этот метод делегирует вызов методу загрузчика классов модуля findResource(String,String), передавая ему имя модуля (или null, если модуль безымянный) и имя ресурса. Если имя ресурса начинается с косой черты, она удаляется перед делегированием.

Ресурс в именованном модуле может быть инкапсулирован, чтобы код других модулей не мог его обнаружить. Возможность обнаружения ресурса определяется следующим образом:

  • Если имя ресурса заканчивается на ".class", ресурс не инкапсулирован.
  • Из имени ресурса определяется имя пакета. Если имя пакета соответствует пакету в модуле, вызывающий этот метод код может обнаружить ресурс, только если пакет открыт как минимум модулю вызывающего кода. Если ресурс не входит в пакет модуля, он не инкапсулирован.

В приведённом выше описании имя пакета ресурса определяется по последовательности символов перед последним '/' в имени, после чего каждый символ '/' в этой последовательности заменяется на '.'. При определении имени пакета начальная косая черта игнорируется. Например, имя пакета, определённое для ресурса с именем "a/b/c/foo.properties", — "a.b.c". Ресурс с именем "META-INF/MANIFEST.MF" никогда не инкапсулируется, поскольку "META-INF" не является допустимым именем пакета.

Этот метод возвращает null, если ресурс не входит в этот модуль или если ресурс инкапсулирован и вызывающий код не может его обнаружить.

Параметры:
name — имя ресурса
Возвращает:
Входной поток для чтения ресурса или null
Исключения:
IOException — если произошла ошибка ввода-вывода
См. также:
  • Class.getResourceAsStream(String)

toString

public String toString()
Возвращает строковое представление этого модуля. Для именованного модуля представление — это строка "module", за которой следует пробел, а затем имя модуля. Для безымянного модуля представление — это строка "unnamed module", за которой следует пробел, а затем строка, зависящая от реализации и идентифицирующая безымянный модуль.
Переопределяет:
toString в классе Object
Возвращает:
Строковое представление этого модуля

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков с концептуальными обзорами, определениями терминов, обходными решениями и примерами работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, 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.

Spec-Zone.ru

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