различные ресурсы (infoq, jigsaw-dev, osdir) показывают, что наличие того же пакета в различных модулях ява приведет к LayerInstantiationException
, даже когда пакеты находятся внутри модуля (неэкспортированной).
Это, кажется, точная противоположность того, что requirements говорят:Java 9 перекрывающихся неэкспортируемые пакеты
Java-компилятор, виртуальная машина, и времени выполнения системы необходимо убедиться, что модули, которые содержат пакеты одного и того же имени не мешают друг другу , Если два разных модуля содержат пакеты с одинаковым именем, то с точки зрения каждого модуля все типы и члены этого пакета определяются только этим модулем.
Таким образом, два модуля, используемые приложением, могут содержать частные пакеты с тем же именем?
EDIT
Это issue из спецификациям пестицидов как указывает Станислав Лукьянов
Я бы сказал, что два загрузчика классов не должны находиться в отношениях между родителями и родителями, потому что для меня это означает, что ребенок сначала попросит родителя для класса/пакета и только затем попытается загрузить его самостоятельно (или наоборот) – Bax
Чтобы избежать этого, Java 9 отказался от метода 'getPackage' в пользу метода' getDefinedPackage'.Такое же имя пакета двумя разными загрузчиками классов не считается равным даже сегодня; если вы, например, подкласс A из B, B не можете переопределить частные методы пакета A, если он был загружен в другой загрузчик классов. Если родитель не определяет один и тот же класс (!), Нет проблем, если они используют тот же пакет, что и его не равный. Эта проблема возникает только в том случае, если пакеты определены двумя модулями внутри одного загрузчика классов. –
- это каждый модуль, загруженный другим загрузчиком классов по умолчанию? – Bax