Spec-Zone.ru › OpenJDK 24

Модуль класса

java.lang.Object
java.lang.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
См. также:
  • 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()
Возвращает строковое представление этого модуля.

Методы, объявленные в классе 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 Безымянные модули
См. также:
  • 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(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 при вызове для безымянного модуля.

Этот метод не проверяет, читает ли данный модуль этот модуль.

Примечание API:
Пакет p, открытый для модуля M, позволяет коду в M выполнить глубокое рефлексирование всех типов в пакете. Кроме того, если M читает этот модуль, он может получить объект Lookup, которому разрешено define classes в пакете p.
Параметры:
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 модуля с пакетом в модуле.

Этот метод не проверяет, читает ли данный модуль этот модуль.

Примечание API:
Пакет p, открытый для модуля M, позволяет коду в M выполнить глубокое рефлексирование всех типов в пакете. Кроме того, если M читает этот модуль, он может получить объект Lookup, которому разрешено define classes в пакете p.
Параметры:
pn - Имя пакета
Возвращает:
true, если этот модуль открыл пакет безусловно
См. также:
  • ModuleDescriptor.opens()
  • AccessibleObject.setAccessible(boolean)
  • MethodHandles.privateLookupIn(java.lang.Class<?>, java.lang.invoke.MethodHandles.Lookup)

addExports

public Module addExports(String pn, Module other)
Если модуль вызывающего кода — это данный модуль, то обновите этот модуль для экспорта указанного пакета в указанный модуль.

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

Примечание API:
Как указано в разделе 5.4.3 спецификации The Java Virtual Machine Specification, если попытка разрешения символической ссылки завершается неудачей из-за ошибки линковки, то последующие попытки разрешения ссылки всегда завершатся той же ошибкой, которая была сгенерирована в результате первоначальной попытки разрешения.
Параметры:
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:
Этот метод можно использовать в случаях, когда модуль-потребитель использует квалифицированное открытие для открытия пакета для модуля-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()
Возвращает множество имён пакетов для пакетов в этом модуле.

Для именованных модулей возвращаемое множество содержит элемент для каждого пакета в модуле.

Для безымянных модулей возвращаемое множество содержит элемент для каждого пакета, который 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", за которой следует пробел и затем строка, специфичная для реализации, идентифицирующая безымянный модуль.
Overrides:
toString в классе Object
Возвращает:
Строковое представление этого модуля

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/lang/Module.html

Spec-Zone.ru

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