Это необходимо, в частности, в модели фрейма java bean, но это не является обязательным в целом.
У вас может быть сеттер без аргументов, когда они предназначены для «swith» значения.
void setCheck()
может быть, например, предназначено для установки атрибута «check» boolean на true.
Так что, даже если это не «сеттер» в понятии java bean, вы можете представить, что сеттер используется для других целей.
Plus, в соответствии с разделом 7 спецификаций бина, сеттер может иметь более чем один аргумент, например, для индексированных свойств (Индексированное свойство поддерживает диапазон значений. Всякий раз, когда свойство чтения или записи вам просто указать индекс, чтобы определить, какое значение вы хотите.)
void setter(int index, PropertyType value); // indexed setter
void setter(PropertyType values[]); // array setter
в вашем случае, действительный подход будет добавить runtime exception на подпись нашей функции.
Таким образом, вы не ставите ненужную проверку исключения времени компиляции для всех других классов, которые уже вызывают ваш сеттер.
Или вы можете считать свою недвижимость Ограниченное свойство и добавить исключение без выполнения.
Для обеспечения исключения PropertyVetoException требуются методы настройки ограничений. Эти документы для пользователей ограниченного свойства, которые пытались обновить, могут быть vetoed. Так просто ограничен свойство может выглядеть следующим образом:
PropertyType getFoo();
void setFoo(PropertyType value) throws PropertyVetoException;
, которая позволяет VetoableChangeListener быть добавлены, если это необходимо.
Что касается вашего фрагмента кода, это «действительно», но не может быть оптимальными, поскольку (как сказано в this question):
- Проверка должна быть захвачена отдельно от добытчиков или сеттеров в методе проверки , Таким образом, если проверка должна быть повторно использована для нескольких компонентов, она доступна.
- Лучше сбой быстро (отсюда и мое предложение добавить исключение в сеттер).
См. Также http://stackoverflow.com/questions/2750/data-verifications-in-gettersetter-or-default.de – VonC 2008-11-20 13:35:14
Спасибо, очень много. – DragonBorn 2008-11-20 13:46:57
Просто добавил ответ на ваш фрагмент – VonC 2008-11-20 14:16:11