В чем разница между требует и требует статического в объявлении модуля
В чем разница между require и require статическими выражениями модуля в объявлении модуля?
Например:
module bar {
requires java.compiler;
requires static java.base;
}
2 ответа
requires
Предложение выражает, что требуемый модуль необходим во время компиляции и выполнения. Следовательно, когда система модулей сталкивается с таким предложением во время разрешения модуля (фаза, на которой обрабатываются дескрипторы модуля и разрешаются зависимости), она выполняет поиск во вселенной наблюдаемых модулей (модули в JDK и на пути к модулю) и выдает ошибку если он не находит модуль.
requires static
Предложение выражает зависимость, которая является необязательной во время выполнения. Это означает, что во время компиляции модульная система ведет себя точно так же, как описано выше.
Во время выполнения, с другой стороны, он в основном игнорирует requires static
статьи. Если он сталкивается с одним, он не разрешает его. Это означает, что если на наблюдаемый модуль ссылаются только requires static
, это не превращает это в граф модуля! Это может быть немного удивительно на первый взгляд. Если, с другой стороны, модуль превращает его в график каким-либо другим способом (требуется другим модулем, добавляется вручную с помощью--add-modules
(привязано сервисным связыванием), все модули, которые имеют необязательную зависимость от него, могут читать его.
Основное различие между ними состоит в том, что в случае
requires static foo.module;
Зависимость является обязательной в статической фазе, во время компиляции, но необязательной в динамической фазе, во время выполнения, с другой стороны
requires bar.module;
Добавляется, чтобы объявить, что модуль зависит, по имени, от некоторых других модулей, как во время компиляции, так и во время выполнения.