Почему вызов Blah.class.getModule() дает мне Безымянный модуль вместо BlahModule?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему вызов Blah.class.getModule() дает мне Безымянный модуль вместо BlahModule?

Сообщение Anonymous »

Короче, у меня есть BlahModule, для которого я создал модуль-info.java, и один из моих классов в этом модуле называется Blah. Итак, когда другой класс в том же модуле вызывает Blah.class.getModule(), я ожидаю BlahModule, но вместо этого я получаю Безымянный модуль.
Вот что я провел в ходе исследования.
Глядя на документацию для 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 вместо Безымянного модуля?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»