Что касается вопроса метода установки: весь смысл методов установки состоит в том, что они могут проверить, соответствует ли переданный объект требованиям класса. например,
public void setS(String s) {
if (s == null)
throw new IllegalArgumentException("S must not be null");
this.s = s;
}
Или с помощью Google Collections / Google Guava:
public void setS(String s) {
this.s = Preconditions.checkNotNull(s, "S must not be null");
}
Конечно, вы можете определить произвольные ограничения, например ::
/**
* Sets the foo. Legal foo strings must have a length of exactly 3 characters.
*/
public void setFoo(String foo) {
if (foo == null)
throw new IllegalArgumentException("Foo must not be null");
if (foo.length() != 3)
throw new IllegalArgumentException("Foo must have exactly 3 characters");
...
Конечно, в таком случае вы должны всегда указывать правильный диапазон значений для ваших свойств в JavaDoc установщика и / или класса.