Подскажите пожалуйста какой подход являтся правильным при проектировании Java библиотек с множеством внутренних packages?
Сейчас работаю над библиотекой с API для предоставления некоторого фукнционала клиентам.
Текущая бибилиотека имеет много packages включая вложенные и все классы объявлены как public включая те которые ну никак не должны быть доступны клиенту. Сейчас скырытие этих классов обеспечивается тем что они просто не упомянуты в документации. Раз их нет в документации то они "скрыты"!
Даже если я объявляю свой класс как не public проблема в том что мой класс становится не доступным другим внутренним модулям и получается что мне приходитс делать его public и следовательно вновь доступным клиенту.
Сейчас я добавляю новую функицональность в эту библиотеку и хотел бы скрыть реализацию ( хотя бы эту новую часть )
Опять единственный вариант я вижу как то изолировать всю мою функциональность в одном package, но все равно получается что публичный интерфейс этого package будет доступен и клиенту.
Есть какие то еще механизмы языка или общепринятые подходы в таких случаях?
Я посмотрел несколько opensource библиотек и в большинстве случаев в все классы в packages объявлены как public.