У меня есть абстрактный класс:
public abstract class AbstractCommand {
private static State state;
}
Намерение
- Объект класса
State
предоставляется некоторыми "управляющими классами", предоставляя данные, необходимые для каждого подклассаAbstractCommand
- Каждому подклассу нужен доступ для чтения
- Подклассы не разрешают изменять поле
Текущий подход
Поле State
должно быть инициализировано "управляющими классами" программы, чтобы подклассы (определяющие команды) могли использовать его (только для чтения). Подклассы определены внутри и должны использоваться в качестве интерфейса для пользователя. Этот пользователь не должен иметь доступ на запись к State
.
Проблема
- Добавление общедоступного метода
setState()
вAbstractCommand
сделает его доступным для всех подклассов и с ним для пользователя - Создание окончательного поля приведет к созданию объекта в абстрактном классе, и "контрольные классы" должны будут использовать этот объект, кроме того, он не будет заменять
Как вы справляетесь с чем-то вроде этого?
Еще одна попытка
Поскольку некоторые ответы предлагали решения с использованием видимости пакетов, мне интересно, хорошо ли это сделать:
Попросите класс в том же пакете, который предоставляет необходимую информацию, делегируя вызов из "контрольных классов" (извне пакета) в абстрактный класс.
Звучит немного нечетко, но что вы думаете?