私は静的型チェックの大ファンです。これは、次のような愚かな間違いを犯さないようにします。
// java code
Adult a = new Adult();
a.setAge("Roger"); //static type checker would complain
a.setName(42); //and here too
しかし、それはあなたがこのような愚かな間違いを犯すことを妨げません:
Adult a = new Adult();
// obviously you've mixed up these fields, but type checker won't complain
a.setAge(150); // nobody's ever lived this old
a.setWeight(42); // a 42lb adult would have serious health issues
問題は、明らかに異なる種類の情報を表すために同じタイプを使用している場合に発生します。これに対する適切な解決策はInteger
、ビジネスロジックエラーを防ぐためだけにクラスを拡張し、機能を追加しないことだと考えていました。例えば:
class Age extends Integer{};
class Pounds extends Integer{};
class Adult{
...
public void setAge(Age age){..}
public void setWeight(Pounds pounds){...}
}
Adult a = new Adult();
a.setAge(new Age(42));
a.setWeight(new Pounds(150));
これは良い習慣と考えられていますか?または、そのような制限のある設計で、将来予測できないエンジニアリングの問題がありますか?
new Age(...)
オブジェクトを宣言するWeight
と、他の場所にある型の変数に誤って割り当てることはできません。ミスが発生する可能性のある場所の数を減らします。
a.SetAge( new Age(150) )
、まだコンパイル?