В системе присутствует 2 основных класса объектов: документы и справочники,
те в свою очередь наследуются от некоего общего базового класса.
Проблема появилась в тот момент, когда некоторым из потомков
DICTIONARY и
DOCUMENT
понадобилось привить некий дополнительный функционал по работе с флагами (чек боксы, по сути не важно, имеются ввиду любые дополнительные свойства и методы)
Причем этому функционалу было достаточно набора данных имеющемся в
BASE
Тут можно сказать, что функционал для работы с флагами можно внести в
BASE и забыть.
С этим есть проблема:
В иерархии между базовым классом и объектами использующие флаги есть много документов, которым этот функционал не нужен.
И менять базовый класс ради отдельных документов/справочников (добавлю что их немного) никто не будет и не даст, еще по башке надают.
В С++ можно было бы на нужном нам уровне иерархии привить нужные методы.
В Java же приходится изгаляться.
Предлагаемые решения:
I
Копируем методы для работы с классами в каждую ветку иерархии — копипаст. Некрасиво, источник потенциальных ошибок.
II
Создаем методы в каждом классе и делегируем их в статический метод третьего класса со ссылкой на объект.
Тут могут быть неудобства. Метод не будет иметь доступа к private и, возможно, protected свойствам.
(frend class вроде как в Java нет, поправьте меня, если неправ)
Это значит что придется в справочники и документы добавлять геттеры и сеттеры для недоступных полей.
Есть идеи, как в Java более элегантно решить этот вопрос?