Java 10, Intellij Warning (класс не экспортируется, доступ в том же модуле) - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь использовать Java 10 с intellij в одном из моих проектов и наткнулся на предупреждение.

enter image description here

Это говорит о том, что яне экспортирует класс Server.Если вы видите мою структуру пакета, у меня есть Сервер внутри network пакета, мой файл информации модуля выглядит следующим образом

module core {
    requires com.google.guice;

    requires io.netty.all;

    requires config;

    requires org.apache.logging.log4j;

    exports com.money.heist.server.core;

    opens com.money.heist.server.core.network to com.google.guice;
}

Я намеренно не экспортирую сеть пакета, так как я не хочу этого делать, ноЯ хочу использовать классы внутри сетевого пакета внутри родительского пакета.

Есть ли у них какая-нибудь хорошая / плохая практика, или это просто сумасшествие?

1 Ответ

0 голосов
/ 19 февраля 2019

Если вы развернете предупреждающее сообщение, вы найдете его причину

Кроме того, в Java 9 модуль может скрывать некоторые из своих классов, не экспортируя свои пакеты.

Если общедоступный API класса в экспортированном пакете ссылается на класс из неэкспортированного пакета, такой API бесполезен вне модуля.

Причина такого APIбесполезно то, что никакой другой модуль не может создать экземпляр / access Server class.

Примечательно, что в дескриптор вашего модуля вы включили

opens com.money.heist.server.core.network to com.google.guice;

, который обеспечил бы доступ во время выполнения, но не во время компиляции (возможно, причина, по которой IntelliJне имеет смысла) к типам public и protected в пакете и элементам этих типов public и protected к модулям, к которым они открыты.

Для связик вышесказанному, если вы измените директиву opens на exports, вы больше не увидите предупреждение от IntelliJ.

...