Класс Модуль
- 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.
- С:
- 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> | getAnnotation(Class<T> annotationClass) | Возвращает аннотацию этого элемента для указанного типа, если такая аннотация присутствует, иначе null. |
Annotation[] | getAnnotations() | Возвращает аннотации, которые присутствуют на этом элементе. |
ClassLoader | getClassLoader() | Возвращает |
Annotation[] | getDeclaredAnnotations() | Возвращает аннотации, которые непосредственно присутствуют на этом элементе. |
ModuleDescriptor | getDescriptor() | Возвращает дескриптор модуля для этого модуля или |
ModuleLayer | getLayer() | Возвращает слой модулей, который содержит этот модуль, или |
String | getName() | Возвращает имя модуля или |
Set<String> | getPackages() | Возвращает набор имён пакетов для пакетов в этом модуле. |
InputStream | getResourceAsStream(String name) | Возвращает поток ввода для чтения ресурса в этом модуле. |
boolean | isExported(String pn) | Возвращает |
boolean | isExported(String pn,
Module other) | Возвращает |
boolean | isNamed() | Возвращает |
boolean | isOpen(String pn) | Возвращает |
boolean | isOpen(String pn,
Module other) | Возвращает |
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если это именованный модуль - См. также:
ClassLoader.getUnnamedModule()
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 при вызове для безымянного модуля.
Динамические модули — это именованные модули, которые генерируются во время выполнения. Динамический модуль может или не может находиться в слое модуля.
- Возвращает:
- Слой модуля, содержащий этот модуль
- См. также:
Proxy
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(java.lang.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 если вызван для проверки, открыт ли пакет в этом модуле для него самого. Он возвращает true при вызове для open модуля с пакетом в модуле. Он всегда возвращает true при вызове для безымянного модуля.
Этот метод не проверяет, читает ли данный модуль этот модуль.
- Параметры:
-
pn- Имя пакета -
other- Другой модуль - Возвращает:
-
trueесли этот модуль открыл пакет для по крайней мере данного модуля - См. также:
-
ModuleDescriptor.opens(),addOpens(String,Module),AccessibleObject.setAccessible(boolean),MethodHandles.privateLookupIn(java.lang.Class<?>, java.lang.invoke.MethodHandles.Lookup)
isExported
public boolean isExported(String pn)
Возвращает true если этот модуль экспортирует данный пакет безусловно.
Этот метод всегда возвращает true при вызове для безымянного модуля. Пакет, который opened безусловно, считается экспортированным безусловно во время выполнения, и поэтому этот метод возвращает true если пакет открыт безусловно.
Этот метод не проверяет, читает ли данный модуль этот модуль.
- Параметры:
-
pn- Имя пакета - Возвращает:
-
trueесли этот модуль экспортирует пакет безусловно - См. также:
ModuleDescriptor.exports()
isOpen
public boolean isOpen(String pn)
Возвращает true если этот модуль открыл пакет безусловно.
Этот метод всегда возвращает true при вызове для безымянного модуля. Кроме того, он всегда возвращает true при вызове для open модуля с пакетом в модуле.
Этот метод не проверяет, читает ли данный модуль этот модуль.
- Параметры:
-
pn- Имя пакета - Возвращает:
-
trueесли этот модуль открыл пакет безусловно - См. также:
ModuleDescriptor.opens()
addExports
public Module addExports(String pn,
Module other) Если модуль вызывающего является этим модулем, обновляет этот модуль так, чтобы он экспортировал данный пакет данному модулю.
Этот метод не имеет эффекта, если пакет уже экспортирован (или открыт) данному модулю.
- Примечание к API:
- Как указано в разделе 5.4.3 Спецификации виртуальной машины Java™, если попытка разрешить символическую ссылку терпит неудачу из-за ошибки связывания, то последующие попытки разрешить ссылку всегда завершаются той же ошибкой, которая была выброшена в результате первоначальной попытки разрешения.
- Параметры:
-
pn- Имя пакета -
other- Модуль - Возвращает:
- Этот модуль
- Исключение:
-
IllegalArgumentException- Еслиpnявляетсяnull, или это именованный модуль, и пакетpnне является пакетом в этом модуле -
IllegalCallerException- Если это именованный модуль, и модуль вызывающего не является этим модулем - См. также:
isExported(String,Module)
addOpens
public Module addOpens(String pn,
Module other) Если этот модуль открыл пакет для по крайней мере вызывающего модуля, обновляет этот модуль так, чтобы он открыл пакет для данного модуля. Открытие пакета этим методом позволяет отражать все типы в пакете и все их члены, а не только публичные типы и их публичные члены, для данного модуля при использовании API, поддерживающих частный доступ или способ обхода или подавления стандартных проверок доступа языка Java.
Этот метод не имеет эффекта, если пакет уже открыт для данного модуля.
- Примечание к API:
- Этот метод может использоваться в случаях, когда модуль-потребитель использует квалифицированное открытие для открытия пакета для модуля-API, но где рефлексивный доступ к членам классов в модуле-потребителе делегируется коду в другом модуле. Код в модуле-API может использовать этот метод для открытия пакета в модуле-потребителе для другого модуля.
- Параметры:
-
pn- Имя пакета -
other- Модуль - Возвращает:
- Этот модуль
- Исключение:
-
IllegalArgumentException- Еслиpnявляетсяnull, или это именованный модуль, и пакетpnне является пакетом в этом модуле -
IllegalCallerException- Если это именованный модуль и этот модуль не открыл пакет для по крайней мере вызывающего модуля - См. также:
-
isOpen(String,Module),AccessibleObject.setAccessible(boolean),MethodHandles.privateLookupIn(java.lang.Class<?>, java.lang.invoke.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()
Возвращает набор имён пакетов для пакетов в этом модуле.
Для именованных модулей возвращаемый набор содержит элемент для каждого пакета в модуле.
Для безымянных модулей этот метод эквивалентен вызову метода getDefinedPackages загрузчика классов этого модуля и возвращает набор имён пакетов.
- Возвращает:
- набор имён пакетов пакетов в этом модуле
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", за которой следует пробел и реализующая строка, идентифицирующая безымянный модуль.
© 1993, 2020, 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/11/docs/api/java.base/java/lang/Module.html