Spec-Zone.ru › OpenJDK 25

Класс Module

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

Именованные модули имеют name и создаются виртуальной машиной Java, когда граф модулей определяется для виртуальной машины 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

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

getAnnotationsByType, getDeclaredAnnotation, getDeclaredAnnotationsByType, isAnnotationPresent

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

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)
Если модуль вызывающего кода — это данный модуль, обновляет данный модуль, экспортируя указанный пакет в указанный модуль.

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

Примечание 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.

Этот метод не оказывает эффекта, если пакет уже открыт для указанного модуля.

Примечание 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, 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.html

Spec-Zone.ru

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