Класс 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
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
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
Методы, объявленные в интерфейсе AnnotatedElement
getAnnotationsByType, getDeclaredAnnotation, getDeclaredAnnotationsByType, isAnnotationPresent
Подробное описание методов
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)
Этот метод не оказывает эффекта, если пакет уже экспортируется (или открыт) для указанного модуля.
- Примечание 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:
- Этот метод можно использовать в случаях, когда модуль-потребитель применяет квалифицированную директиву 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/lang/Module.html