コンストラクタで引数チェックをし、例外を投げることは設計上良くないのでしょうか?例えば
class hoge {
private final int i;

hoge(int i) {
if(i >= 0)
this.i = i;
else
throw new IllegalArgumentException
}
}

フィールドiに負の数を持たせたくない場合このようにするのが自然かなと考えたのですがいかがでしょうか?