Подтвердить что ты не робот

Создание класса java, защищенного пакетом, в родительском пакете

У меня есть два пакета

uk.co.planetbeyond.data

и

uk.co.planetbeyond.data.bean

Как сделать классы, присутствующие в uk.co.planetbeyond.data.bean видимыми для классов в родительском пакете uk.co.planetbeyond.data, но невидимые в других пакетах?

Возможно ли это?

4b9b3361

Ответ 1

Насколько мне известно, это невозможно. Хотя мы склонны думать о пакетах как о формировании иерархии, они не касаются языка Java.

Ответ 2

Как указано во всех других ответах: Нет. Иерархия пакетов ничего не значит вне сознания человека, который его настроил.

По-моему, это главный недостаток Java. При создании монстров-систем путем слияния других программ-монстров ничто не сравнится с Java-языком. Все остальные языки в конечном итоге заканчиваются запутанными, недокументируемыми, неразборчивыми грудами кода.

Ну, так же и Java, но она намного больше, чем любой другой язык, который я использовал. Но его незнание иерархии пакетов - невозможность инкапсулировать данные в иерархии пакетов - это ограничение или кирпичная стена, которая его останавливает. Я могу поместить систему или набор классов, которые работают вместе, в одном пакете. Затем я могу сделать кучу этих классов частными, чтобы этот пакет был добавлен в другую суперсистему, которую суперсистема не может видеть и смущать - эти скрытые классы.

Но если моя система уже достаточно супер ( "супер", как в "сверхчеловеке", а не "суперкласс" ), для того, чтобы для ясности требовалось несколько пакетов, мои ранее закрытые для пакета классы теперь должны быть общедоступными, и я не могу остановиться супер-суперсистему видят все в моей суперсистеме.

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

Я надеюсь, что Jigsaw, упомянутый в другом месте, поможет. Я также надеюсь, что инструменты разработчика, такие как IDE, начнут отображать пакеты в формате контура, а не обрабатывать a.b и a.b.c.d.e, как если бы они были на одном уровне - просто элементы в том же списке.

Ответ 3

Короткий ответ, это невозможно, если только для подклассов классов в вашем пакете uk.co.planetbeyond.data.bean.

Вам может быть интересно прочитать:

http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

Не является ли "приватным" пакетом? членский доступ является синонимом доступа по умолчанию (без модификатора)?

В Java разница между стандартными, общедоступными, защищенными и частными

Java - доступ к методу внутри класса private-private?

Ответ 4

В настоящее время это невозможно. Пакеты Java на самом деле не являются иерархическими в природе - классы либо находятся в одном пакете, либо они не являются.

Однако это, вероятно, одна из вещей, которые будут рассмотрены Project Jigsaw, которые могут быть включены в Java 8. Это должно позволить создавая классы, которые являются общедоступными во всех пакетах модуля, но не экспортируются в другие модули.

Ответ 5

Нет, это невозможно. Видимость пакета не может выборочно распространяться на другие пакеты. Класс может быть только закрытым (то есть видимым только для не закрытого закрывающего класса), package-private (без модификатора, видимого только для других классов в одном пакете) или public (видимый для всех классов).

Ответ 6

Насколько я знаю, это невозможно в Java. Для получения дополнительной информации см. Ссылку здесь, в которой ясно объясняются модификаторы доступа в Java.