Это необходимо конкретно в каркасной модели Java-бина, но в целом это не обязательно.
У вас может быть setter без аргументов, если они предназначены для "переключения" значения.
void setCheck()
Например,
может означать, что для логического атрибута "check" установлено значение true.
Таким образом, даже если он не является «сеттером» в смысле термина «Java-бин», вы можете представить, что сеттер используется для других целей.
Кроме того, согласно разделу 7 спецификаций JavaBean, установщик может иметь более одного аргумента , например, для индексированных свойств (индексированное свойство поддерживает диапазон значений. Всякий раз, когда свойство читается или записывается Вы просто указываете индекс, чтобы определить, какое значение вы хотите.)
void setter(int index, PropertyType value); // indexed setter
void setter(PropertyType values[]); // array setter
В вашем случае правильным подходом будет добавить исключение времени выполнения к сигнатуре нашей функции.
Таким образом, вы не ставите ненужную проверку исключений во время компиляции для всех других классов, которые уже вызывают ваш установщик.
Или вы можете рассматривать ваше свойство как Ограниченное свойство и добавить исключение не во время выполнения.
Для поддержки PropertyVetoException требуются методы установки ограниченных свойств.
Это документы для пользователей ограниченного свойства, что попытки обновления могут быть
ветировал.
Таким образом, простое ограниченное свойство может выглядеть так:
PropertyType getFoo();
void setFoo(PropertyType value) throws PropertyVetoException;
, который позволяет при необходимости добавлять VetoableChangeListener.
Что касается вашего сниппета, он «действителен», но может быть неоптимальным, потому что (как сказано в этот вопрос ):
- Валидация должна регистрироваться отдельно от методов получения или установки в методе проверки. Таким образом, если проверка нуждается в повторном использовании для нескольких компонентов, она доступна.
- Лучше быстро потерпеть неудачу (отсюда мое предложение добавить исключение в сеттер).