フィールドと一対一で対応するような setter の問題点

2月30日は不正だが、d.setMonth(2); d.setDay(30); は不正とは必ずしも言えない。

プログラミング言語/宗教論争 getter/setter を使うか使わないか

これはわかりやすくていい例だな。
この場合は (フィールドと一対一で対応しているように見える) 単純な setter じゃなくて、setDate(year, month, day) みたいな setter を用意する*1か、イミュータブルにしてコンストラクタからのみ設定できるようにすればいい。

*1:year も追加してるのはもちろんうるう年を考慮できるように