У меня есть абстрактный суперкласс со свойством, которое должно быть установлено подклассом для правильной работы экземпляров ...
abstract SuperClass {
// this list must be initialized by the subclass
List<? extends SavedSearch> savedSearches;
}
У этого абстрактного суперкласса есть методы, которые работают с saveSearches, но доподкласс, чтобы обеспечить правильную инициализацию списка.
Каков наилучший способ сделать это?
С Java легко создать суперкласс методов , которые должны быть реализованы подклассами, ноне свойства.Я думал о необходимости абстрактного метода initSavedSearch, подобного этому, в суперклассе ...
abstract initSavedSearchList();
... но, как это ни странно, разработчик подкласса не обязан ничего делать в своей реализации метода, они моглипросто ничего не делайте.
Я знаю, что могу кодировать некоторые проверки во время выполнения, чтобы убедиться, что список saveSearch инициализируется перед запуском кода в суперклассе, но я надеюсь на проверки во время компиляции (сродниабстрактные методы), а не проверки во время выполнения.
Я видел ответ C # на аналогичный вопрос, который предлагает скрыть конструктор по умолчанию (zero-arg) и создать конструктор в абстрактном классе, который требует список в качестве аргумента.Звучит неплохо и для Java.Но мой конкретный класс - это управляемый компонент JSF 1.x.Я новичок в JSF, но AFAIK нет простого способа заставить JSF вызывать нестандартный конструктор для Managed Beans.
Есть ли способ сделать это, когда я получаю некоторую помощь во время компиляции, чтобычто реализующие подклассы правильно инициализируют свойство суперкласса?
Спасибо!