Вот что я провел в ходе исследования.
Глядя на документацию для Class.getModule(), там говорится о модулях.
Если этот класс есть в безымянный модуль, то возвращается безымянный модуль загрузчика классов для этого класса.
Хорошо, когда я щелкаю ссылку, чтобы прочитать о безымянных модулях, я попадаю в Спецификацию языка Java для безымянных модулей (7.7.5), в которой говорится следующее.
Наблюдаемая обычная единица компиляции , которую хост-система не связывает с именованным модулем (§7.3) связан с безымянным модулем.
Хорошо, похоже, что связь должна быть явной. Переход по ссылке на 7.3 приводит меня к следующему.
Каждая наблюдаемая единица компиляции может быть связана с модулем следующим образом:
- Хост-система может определить, что наблюдаемая обычная единица компиляции связана с модулем, выбранным хост-системой, за исключением (i) обычных единиц компиляции в предопределенном пакете java и его подпакетах lang и io, которые все связаны с модулем java.base, и (ii) любая обычная единица компиляции в безымянном пакете, которая связана с модулем, как указано в §7.4.2.
- Хост-система должна определить, что наблюдаемая модульная единица компиляции связана с модулем, объявленным модульной единицей компиляции.
Хорошо, просматривая немного, я наткнулся на версию 7.2, в которой говорится следующее.
Хост-система может определить, что единица компиляции содержит объявление модуля фактически не наблюдаем и, следовательно, не связан с объявленным в нем модулем. Это позволяет компилятору выбрать, какой каталог в пути к источнику модуля «действительно» является воплощением данного модуля. Однако если хост-система определяет, что единица компиляции, содержащая объявление модуля, является наблюдаемой, то §7.4.3 требует, чтобы единица компиляции была связана с объявленным в ней модулем, а не с каким-либо другим модулем.
Хорошо, поэтому акт ассоциации модулей с единицами компиляции СТРОГО определяется наблюдаемостью объявления модуля при компиляции. единица измерения.
Хорошо, что значит быть наблюдаемым?
Ну, в версии 7.3 (часть которой я рассмотрел выше) перечислены некоторые вещи, но нет ничего, что бы явно объясняло, КАК узнать, является ли что-то наблюдаемым, а что нет. Похоже, что хост-система может это определить, но как мне не ясно.
Так что здесь я более или менее заблудился. Я действительно не понимаю, куда еще можно смотреть. Я, вероятно, мог бы выполнить поиск по всему JLS с помощью Ctrl+F, но я решил, что перед этим напишу этот пост.
И повторюсь, все эти исследования предназначены просто для ответа на вопрос — что требуется для того, чтобы Blah.class.getModule() возвращал мой BlahModule вместо Безымянного модуля?
Мобильная версия