Как заставить подкласс инициализировать свойство суперкласса во время компиляции?

У меня есть абстрактный суперкласс со свойством, которое должно быть задано подклассом для правильной работы экземпляров...

abstract SuperClass {
  // this list must be initialized by the subclass
  List<? extends SavedSearch> savedSearches;
}

Этот абстрактный суперкласс имеет методы, которые работают с savedSearches, но зависит от подкласса, чтобы гарантировать правильную инициализацию списка.

Каковы наилучшие пути для этого?

С помощью Java легко создавать методы суперкласса , которые должны быть реализованы подклассами, но не свойствами. Я подумал о необходимости абстрактного метода initSavedSearch, подобного этому в суперклассе...

abstract initSavedSearchList();

... но это показалось странным, реализатор подкласса не обязан делать что-либо при реализации своего метода, они просто ничего не могут сделать.

Я знаю, что я могу кодировать некоторые проверки во время выполнения, чтобы убедиться, что список savedSearch инициирован до запуска кода в суперклассе, но я надеюсь, что проверки во время компиляции (сродни абстрактным методам) не будут проверяться во время выполнения.

Я увидел ответ C # на аналогичный вопрос, который предлагает скрыть конструктор по умолчанию (zero-arg) и создать конструктор в абстрактном классе, который требует список как arg. Это звучит прилично и для Java. Но мой особый класс - управляемый компонент JSF 1.x. Я новичок в JSF, но AFAIK нет простого способа заставить JSF вызвать нестандартного конструктора для Managed Beans.

Есть ли способ сделать это, когда я получаю некоторую помощь во время компиляции, чтобы гарантировать, что реализующие подклассы правильно инициализируют свойство суперкласса?

Спасибо!

  • Гари
-121--1774092- Программная вставка данных в документ InDesign Для создания документов необходимо использовать Adobe InDesign. Нам, в основном, необходимо иметь пару переменных по всему документу (название компании, название проекта и т.д.), которые должны быть заполнены. Мне было интересно...

Для создания документов необходимо использовать Adobe InDesign. Нам, в основном, необходимо иметь пару переменных по всему документу (название компании, название проекта и т.д.), которые должны быть заполнены.

Мне было интересно, есть ли способ взять существующий шаблон и, возможно, программно заполнить их, используя язык, с которым мне удобно (Ruby, Python и т.д.). Я попытался открыть файл Adobe InDesign с помощью текстового редактора, но когда я делаю изменения с помощью Notepad++, а затем открываю файл в InDesign, он сообщает мне, что файл поврежден.

Если у вас есть какие-либо знания о программном построении документов InDesign или какие-либо учебные пособия, которые были бы очень признательны.

PS. Я пытался проверить Adobe ExtendScript, но не нашел много документации, применимой к InDesign.

Спасибо за помощь!

6
задан aren55555 8 September 2011 в 18:30
поделиться