Класс 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
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Module |
addExports |
Если модуль вызывающего кода — это данный модуль, обновляет данный модуль, чтобы экспортировать указанный пакет в указанный модуль. |
Module |
addOpens |
Если данный модуль открыл указанный пакет по крайней мере для модуля вызывающего кода, обновляет данный модуль, чтобы открыть пакет также для указанного модуля. |
Module |
addReads |
Если модуль вызывающего кода — это данный модуль, обновляет данный модуль, чтобы он читал указанный модуль. |
Module |
addUses |
Если модуль вызывающего кода — это данный модуль, обновляет данный модуль, добавляя зависимость от службы, соответствующую указанному типу службы. |
boolean |
canRead |
Указывает, читает ли данный модуль указанный модуль. |
boolean |
canUse |
Указывает, имеет ли данный модуль зависимость от службы, соответствующую указанному типу службы. |
<T extends Annotation> |
getAnnotation |
Возвращает аннотацию этого элемента указанного типа, если такая аннотация присутствует, иначе возвращает null. |
Annotation[] |
getAnnotations() |
Возвращает аннотации, присутствующие у этого элемента. |
ClassLoader |
getClassLoader() |
Возвращает ClassLoader этого модуля. |
Annotation[] |
getDeclaredAnnotations() |
Возвращает аннотации, непосредственно присутствующие у этого элемента. |
ModuleDescriptor |
getDescriptor() |
Возвращает дескриптор этого модуля или null, если данный модуль является безымянным. |
ModuleLayer |
getLayer() |
Возвращает слой модулей, содержащий данный модуль, или null, если данный модуль не входит в слой модулей. |
String |
getName() |
Возвращает имя модуля или null, если данный модуль является безымянным. |
Set |
getPackages() |
Возвращает набор имен пакетов, входящих в данный модуль. |
InputStream |
getResourceAsStream |
Возвращает входной поток для чтения ресурса в этом модуле. |
boolean |
isExported |
Возвращает true, если данный модуль безусловно экспортирует указанный пакет. |
boolean |
isExported |
Возвращает true, если данный модуль экспортирует указанный пакет по крайней мере в указанный модуль. |
boolean |
isNamed() |
Возвращает true, если данный модуль является именованным. |
boolean |
isNativeAccessEnabled() |
Возвращает true, если данный модуль может обращаться к ограниченным методам. |
boolean |
isOpen |
Возвращает true, если данный модуль безусловно открыл пакет. |
boolean |
isOpen |
Возвращает true, если данный модуль открыл пакет по крайней мере для указанного модуля. |
String |
toString() |
Возвращает строковое представление данного модуля. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создает и возвращает копию этого объекта. |
boolean |
equals |
Указывает, «равен» ли этот объект другому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии. Финализация объявлена устаревшей и будет удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо истечения определенного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо истечения определенного промежутка реального времени. |
Методы, объявленные в интерфейсе AnnotatedElement
getAnnotationsByType, getDeclaredAnnotation, getDeclaredAnnotationsByType, isAnnotationPresent | Модификатор и тип | Метод | Описание |
|---|---|---|
default <T extends Annotation> |
getAnnotationsByType |
Возвращает аннотации, связанные с этим элементом. |
default <T extends Annotation> |
getDeclaredAnnotation |
Возвращает аннотацию этого элемента указанного типа, если такая аннотация присутствует непосредственно, иначе возвращает null. |
default <T extends Annotation> |
getDeclaredAnnotationsByType |
Возвращает аннотации этого элемента указанного типа, если они присутствуют непосредственно или косвенно. |
default boolean |
isAnnotationPresent |
Возвращает true, если аннотация указанного типа присутствует у этого элемента, иначе false. |
Подробное описание методов
isNamed
public boolean isNamed()
true, если этот модуль является именованным модулем.- Возвращает:
-
true, если это именованный модуль - См. Спецификацию языка Java:
- 7.7.5 Безымянные модули
- См. также:
getName
public String getName()
null, если этот модуль является безымянным.- Возвращает:
- Имя модуля
getClassLoader
public ClassLoader getClassLoader()
ClassLoader этого модуля.- Возвращает:
- Загрузчик классов этого модуля
getDescriptor
public ModuleDescriptor getDescriptor()
null, если этот модуль является безымянным.- Возвращает:
- Дескриптор этого модуля
getLayer
public ModuleLayer getLayer()
null, если этот модуль не входит в слой модулей. Слой модулей содержит именованные модули, поэтому при вызове для безымянного модуля этот метод всегда возвращает null. Динамические модули — это именованные модули, создаваемые во время выполнения. Динамический модуль может входить в слой модулей, а может и не входить.
- Возвращает:
- Слой модулей, содержащий этот модуль
- См. также:
isNativeAccessEnabled
public boolean isNativeAccessEnabled()
true, если этот модуль может обращаться к ограниченным методам.- Возвращает:
-
true, если этот модуль может обращаться к ограниченным методам. - Начиная с версии:
- 22
canRead
public boolean canRead(Module other)
true. Он также возвращает true при вызове для безымянного модуля (поскольку безымянные модули читают все модули).- Параметры:
-
other— другой модуль - Возвращает:
-
true, если этот модуль читаетother - См. также:
addReads
public Module addReads(Module other)
other — это данный модуль (все модули читают сами себя), если этот модуль является безымянным (безымянные модули читают все модули) или если этот модуль уже читает other.- Примечание по реализации:
-
Рёбра чтения, добавленные этим методом, являются слабыми и не препятствуют сборке мусора для
other, если этот модуль доступен через сильную ссылку. - Параметры:
-
other— другой модуль - Возвращает:
- этот модуль
- Исключения:
-
IllegalCallerException— если это именованный модуль, а модуль вызывающего кода не является этим модулем - См. также:
isExported
public boolean isExported(String pn, Module other)
true, если этот модуль экспортирует указанный пакет как минимум указанному модулю. При вызове для проверки того, экспортируется ли пакет этого модуля самому этому модулю, метод возвращает true. При вызове для безымянного модуля он всегда возвращает true. Пакет, open для указанного модуля, во время выполнения считается экспортируемым этому модулю, поэтому метод возвращает true, если пакет открыт для указанного модуля.
Этот метод не проверяет, читает ли указанный модуль данный модуль.
- Параметры:
-
pn— имя пакета -
other— другой модуль - Возвращает:
-
true, если этот модуль экспортирует пакет как минимум указанному модулю - См. также:
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, если этот модуль открыл пакет как минимум указанному модулю - См. также:
isExported
public boolean isExported(String pn)
true, если этот модуль безусловно экспортирует указанный пакет. При вызове для безымянного модуля этот метод всегда возвращает true. Пакет, безусловно opened, во время выполнения считается безусловно экспортируемым, поэтому метод возвращает true, если пакет безусловно открыт.
Этот метод не проверяет, читает ли указанный модуль данный модуль.
- Параметры:
-
pn— имя пакета - Возвращает:
-
true, если этот модуль безусловно экспортирует пакет - См. также:
isOpen
public boolean isOpen(String pn)
true, если этот модуль безусловно открыл пакет. При вызове для безымянного модуля этот метод всегда возвращает true. Кроме того, при вызове для open модуля с пакетом в модуле он всегда возвращает true.
Этот метод не проверяет, читает ли указанный модуль данный модуль.
- Примечание по API:
- Пакет,
pоткрытый модулюM, позволяет коду вMвыполнять глубокую рефлексию для всех типов в пакете. Кроме того, еслиMчитает этот модуль, он может получить объектLookup, которому разрешеноdefine classesв пакетеp. - Параметры:
-
pn— имя пакета - Возвращает:
-
true, если этот модуль безусловно открыл пакет - См. также:
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 Разрешение
- См. также:
addOpens
public Module addOpens(String pn, Module other)
Открытие пакета этим методом позволяет указанному модулю выполнять рефлексию для всех типов в пакете и всех их членов, а не только для общедоступных типов и их общедоступных членов, используя API, которые поддерживают закрытый доступ или позволяют обойти либо отключить проверки контроля доступа языка Java.
Открытие пакета этим методом не позволяет указанному модулю рефлексивно задавать или получать дескриптор метода с доступом на запись к полю final, объявленному в классе этого пакета.
Этот метод не действует, если пакет уже открыт указанному модулю.
- Примечание по API:
- Этот метод можно использовать в случаях, когда модуль-потребитель открывает пакет с квалификатором opens для модуля API, но рефлексивный доступ к членам классов в модуле-потребителе делегируется коду другого модуля. Код модуля API может использовать этот метод, чтобы открыть пакет в модуле-потребителе для другого модуля.
- Параметры:
-
pn— имя пакета -
other— модуль - Возвращает:
- этот модуль
- Исключения:
-
IllegalArgumentException— еслиpnравноnullили если это именованный модуль, а пакетpnне является пакетом этого модуля -
IllegalCallerException— если это именованный модуль и этот модуль не открыл пакет как минимум модулю вызывающего кода - См. также:
addUses
public Module addUses(Class<?> service)
ServiceLoader от имени других модулей или которым другой код передаёт ссылку на тип службы. При вызове для безымянного или автоматического модуля этот метод ничего не делает. Этот метод не приводит к повторному запуску resolveAndBind.
- Параметры:
-
service— тип службы - Возвращает:
- этот модуль
- Исключения:
-
IllegalCallerException— если это именованный модуль, а модуль вызывающего кода не является этим модулем - См. также:
canUse
public boolean canUse(Class<?> service)
true.- Параметры:
-
service— тип службы - Возвращает:
-
true, если этот модуль использует тип службыst - См. также:
getPackages
public Set<String> getPackages()
Для именованных модулей возвращаемое множество содержит по одному элементу для каждого пакета модуля.
Для безымянных модулей возвращаемое множество содержит по одному элементу для каждого пакета, который has been defined в безымянном модуле.
- Возвращает:
- множество имён пакетов, входящих в этот модуль
getAnnotation
public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
null. Обратите внимание, что любая аннотация, возвращённая этим методом, является аннотацией объявления.
- Определено в:
-
getAnnotationв интерфейсеAnnotatedElement - Параметры типа:
T— тип аннотации, которую нужно найти и вернуть, если она присутствует- Параметры:
-
annotationClass— объект Class, соответствующий типу аннотации - Возвращает:
- аннотацию этого элемента указанного типа, если она присутствует у этого элемента, иначе — null
getAnnotations
public Annotation[] getAnnotations()
Обратите внимание, что любые аннотации, возвращённые этим методом, являются аннотациями объявления.
- Определено в:
-
getAnnotationsв интерфейсеAnnotatedElement - Возвращает:
- аннотации, присутствующие у этого элемента
getDeclaredAnnotations
public Annotation[] getDeclaredAnnotations()
Обратите внимание, что любые аннотации, возвращённые этим методом, являются аннотациями объявления.
- Определено в:
-
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— если произошла ошибка ввода-вывода - См. также:
toString
public String toString()
"module", за которой следует пробел, а затем имя модуля. Для безымянного модуля представление — это строка "unnamed module", за которой следует пробел, а затем строка, зависящая от реализации и идентифицирующая безымянный модуль.
© 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.