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