Классы и методы недоступны для пользователя, но для подпакетов - PullRequest
0 голосов
/ 29 октября 2018

Этот вопрос был задан аналогично: Java: Видимость подпакета?

Моя текущая структура пакета:

src/
 |   library/
 |   |    InterfaceA.java
 |   |    ClassB.java
 |   |    provider/
 |   |    |    ClassofInterfaceA.java
 |   user/
 |   |    UsageOfClassofInterfaceA.java

Таким образом, ClassOfInterfaceA.java использует методы из ClassB.java и реализует Interface.java.

Наш пользователь, создавший класс UsageOfClassOfInterfaceA.java, должен иметь доступ только к методам из ClassOfInterfaceA.java. Он не должен иметь доступа к какому-либо классу / интерфейсу / переменной или методу из пакета библиотеки.

Поскольку ответы на связанный вопрос больше направлены на тесты junit и то, как их использует среда IDE, я не смог найти никаких ответов.

Пожалуйста, не рекомендуйте никакую другую структуру пакета, так как это предопределено нашим лектором.

Заранее спасибо:)

РЕДАКТИРОВАТЬ: так как он был задан, все классы в настоящее время являются публичными, потому что я не могу обратиться к ним через мой ClassOfInterfaceA.java Я также должен использовать Java8.

Чтобы обратиться к фабрике, пользовательский интерфейс будет использовать ClassOfInterfaceA.java для демонстрации их использования. Так что UsageOfClassOfInterfaceA.java по сути является классом пользовательского интерфейса.

1 Ответ

0 голосов
/ 29 октября 2018

Прежде всего, ваш первоначальный подход неверен: классы представляют детали реализации. Таким образом, вы хотите, чтобы ваши пользователи полагались исключительно на интерфейсы. Таким образом, вы должны скорее показать этот интерфейс, а не какой-то класс, реализующий его.

Итак, интерфейс переходит на public , остальные классы становятся закрытыми или защищены пакетами. И с этой точки зрения вы также организуете макет вашего файла / пакета: вещи, которые должны быть представлены, должны быть размещены в одном месте.

Еще одна вещь, которую вам нужно добавить: какая-то фабрика, которая позволяет «пользовательскому» коду получать экземпляр указанного интерфейса (как сказано, пользовательский класс не должен знать имя этого класса реализации, поэтому он не может выполните new () сам вызов).

Наконец: вы должны понимать, что в Java 9 добавлена ​​концепция модуля, что позволяет рассмотреть еще больше вариантов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...