Сделать методы Java видимыми только для определенных классов

У меня есть класс менеджера, который отвечает за управление объектами определенного вида. Для этого ему необходимо манипулировать этими объектами, но эти объекты не имеют никакого отношения к менеджеру, так что с технической точки зрения они находятся в отдельных пакетах ».Менеджеры проекта" а также "project.objects» , Важно то, что этими объектами должны манипулировать только менеджеры и нигде больше, но они должны быть доступны каждому другому классу в проекте.

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

(Это отчасти потому, что я хочу, чтобы моя среда IDE перестала показывать мне методы-манипуляторы всякий раз, когда я автозаполняю код на рассматриваемых объектах, поэтому мне всегда приходится проходить маршрут через менеджер, чтобы соответствующие таблицы корректно обновлялись при каждом изменении рассматриваемых объектов) ,

Есть ли какие-либо идеи на этот счет или очевидный путь лучше всего в любом случае?

Ответы на вопрос(3)

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

Технически, вы бы объявили пакет манипулирующих методов защищенным (без модификатора вообще). Защищенные методы позволяют расширять класс проще.

но поскольку менеджеры и объекты являются совершенно отдельными объектами, они невписываюсь туда философски.

Я понимаю. Ява не"друг» декларация, что C ++ имеет.

Вы можете прокомментировать манипулирующие методы, но это нерешить вашу проблему затмения.

Решение Вопроса

Почему бы не иметь интерфейс под названием

ManagerFunctions

а другой называется

ClientFunctions

Вы управляемые объекты будут реализовыватьи то и другое из этих.

Когда вы создаете управляемые объекты, вы передаете их, но только как ссылки наClientFunctions, Однако объекты менеджера будут называться ими какManagerFunctions и, следовательно, иметь доступ к своимудалось' функции. Соответствующий кастинг просто выставит соответствующие методы.

Ваша IDE автоматически представит вам соответствующие методы в зависимости от того, как на эти объекты ссылаются.

 salbeira19 нояб. 2012 г., 15:55
Я уже подумалаAPI-Каминный» Мой проект представляет собой набор интерфейсов с кучей реализаций, чтобы упростить расширение основных идей. Это может быть ударом, чтобы начать делать это на самом деле.

Попросите что-то похожее надруг» объявления C ++, но естьНет прямого эквивалента в Java - видимость пакета ближайшая. В качестве альтернативы вы могли бы пойти на модель, такую как XML DOM, где методы, которые должны быть общедоступными, определены в интерфейсах, и весь клиентский доступ осуществляется через эти интерфейсы. Менеджер будет знать конкретный класс реализации, поэтому может понизить его до необходимого уровня.

Ваш ответ на вопрос