Модуль класса
- Все реализуемые интерфейсы:
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<String> |
getPackages() |
Возвращает набор имен пакетов для пакетов в этом модуле. |
InputStream |
getResourceAsStream |
Возвращает поток ввода для чтения ресурса в этом модуле. |
boolean |
isExported |
Возвращает true если этот модуль экспортирует данный пакет безусловно. |
boolean |
isExported |
Возвращает true если этот модуль экспортирует данный пакет, по крайней мере, для данного модуля. |
boolean |
isNamed() |
Возвращает true если этот модуль является именованным модулем. |
boolean |
isOpen |
Возвращает true если этот модуль открыл пакет безусловно. |
boolean |
isOpen |
Возвращает true если этот модуль открыл пакет, по крайней мере, для данного модуля. |
String |
toString() |
Возвращает строковое представление этого модуля. |
Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Методы, объявленные в интерфейсе java.lang.reflect.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 для этого модуля. Если существует менеджер безопасности, то его метод checkPermission сначала вызывается с разрешением RuntimePermission("getClassLoader") для проверки, разрешено ли вызывающему элементу получить доступ к загрузчику классов.
- Возвращает:
- Загрузчик классов для этого модуля
- Исключения:
-
SecurityException- Если доступ запрещен менеджером безопасности
getDescriptor
public ModuleDescriptor getDescriptor()
null, если этот модуль является безымянным модулем.- Возвращает:
- Дескриптор модуля для этого модуля
getLayer
public ModuleLayer getLayer()
null , если этот модуль не находится в слое модулей. Слой модулей содержит именованные модули, поэтому этот метод всегда возвращает null при вызове на безымянном модуле. Динамические модули являются именованными модулями, которые генерируются во время выполнения. Динамический модуль может или не может находиться в слое модулей.
- Возвращает:
- Слой модулей, содержащий этот модуль
- См. также:
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 при вызове для проверки, открыт ли пакет в этом модуле для себя. Он возвращает true при вызове на open модуле с пакетом в модуле. Он всегда возвращает true при вызове на безымянном модуле.
Этот метод не проверяет, читает ли данный модуль этот модуль.
- Параметры:
-
pn- Имя пакета -
other- Другой модуль - Возвращает:
-
trueесли этот модуль открыл пакет для по крайней мере данного модуля - См. также:
isExported
public boolean isExported(String pn)
true если этот модуль безусловно экспортирует указанный пакет. Этот метод всегда возвращает true при вызове на безымянном модуле. Пакет, который opened безусловно, считается экспортированным безусловно во время выполнения, поэтому этот метод возвращает true если пакет открыт безусловно.
Этот метод не проверяет, читает ли данный модуль этот модуль.
- Параметры:
-
pn- Имя пакета - Возвращает:
-
trueесли этот модуль безусловно экспортирует пакет - См. также:
isOpen
public boolean isOpen(String pn)
true если этот модуль открыл пакет безусловно. Этот метод всегда возвращает true при вызове на безымянном модуле. Кроме того, он всегда возвращает true при вызове на open модуле с пакетом в модуле.
Этот метод не проверяет, читает ли данный модуль этот модуль.
- Параметры:
-
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 Note:
- Этот метод может быть использован в тех случаях, когда модуль-потребитель использует квалифицированное opens для открытия пакета для модуля-API, но когда рефлексивный доступ к членам классов в модуле-потребителе делегируется коду в другом модуле. Код в модуле-API может использовать этот метод, чтобы открыть пакет в модуле-потребителе для другого модуля.
- Parameters:
-
pn- Имя пакета -
other- Модуль - Returns:
- Этот модуль
- Throws:
-
IllegalArgumentException- Еслиpnявляетсяnull, или это именованный модуль и пакетpnне является пакетом в этом модуле -
IllegalCallerException- Если это именованный модуль и этот модуль не открыл пакет по крайней мере для модуля вызывающего - See Also:
addUses
public Module addUses(Class<?> service)
ServiceLoader от имени других модулей или где фреймворк получает ссылку на тип сервиса от другого кода. Этот метод является бесполезным, когда вызывается на безымянном или автоматическом модуле. Этот метод не приводит к повторному выполнению resolveAndBind.
- Parameters:
-
service- Тип сервиса - Returns:
- Этот модуль
- Throws:
-
IllegalCallerException- Если это именованный модуль и модуль вызывающий не равен данному модулю - See Also:
canUse
public boolean canUse(Class<?> service)
true при вызове на безымянном или автоматическом модуле.- Parameters:
-
service- Тип сервиса - Returns:
-
trueесли этот модуль использует тип сервисаst - See Also:
getPackages
public Set<String> getPackages()
Для именованных модулей возвращаемое множество содержит элемент для каждого пакета в модуле.
Для безымянных модулей возвращаемое множество содержит элемент для каждого пакета, в котором has been defined в безымянном модуле.
- Returns:
- множество имён пакетов пакетов в этом модуле
getAnnotation
public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
null при вызове на безымянном модуле. Обратите внимание, что любая аннотация, возвращаемая этим методом, является аннотацией объявления.
- Specified by:
-
getAnnotationв интерфейсеAnnotatedElement - Type Parameters:
-
T- тип аннотации для запроса и возврата, если она присутствует - Parameters:
-
annotationClass- объект Class, соответствующий типу аннотации - Returns:
- аннотация элемента для указанного типа аннотации, если она присутствует на этом элементе, в противном случае null
getAnnotations
public Annotation[] getAnnotations()
Обратите внимание, что любая аннотация, возвращаемая этим методом, является аннотацией объявления.
- Specified by:
-
getAnnotationsв интерфейсеAnnotatedElement - Returns:
- аннотации, присутствующие на этом элементе
getDeclaredAnnotations
public Annotation[] getDeclaredAnnotations()
Обратите внимание, что любая аннотация, возвращаемая этим методом, является аннотацией объявления.
- Specified by:
-
getDeclaredAnnotationsв интерфейсеAnnotatedElement - Returns:
- аннотации, непосредственно присутствующие на этом элементе
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 если ресурс не в этом модуле, ресурс запечатан и не может быть найден вызывающим, или доступ к ресурсу запрещён менеджером безопасности.
- Parameters:
-
name- Имя ресурса - Returns:
- Поток ввода для чтения ресурса или
null - Throws:
-
IOException- Если возникает ошибка ввода-вывода - See Also:
toString
public String toString()
"module", за которой следует пробел и затем имя модуля. Для безымянного модуля представление — это строка "unnamed module", за которой следует пробел и затем строка, специфичная для реализации, которая идентифицирует безымянный модуль.- Overrides:
-
toStringв классеObject - Returns:
- Строковое представление этого модуля
© 1993, 2021, 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/17/docs/api/java.base/java/lang/Module.html