Saya penggemar berat tipe statis memeriksa. Ini mencegah Anda membuat kesalahan bodoh seperti ini:
// java code
Adult a = new Adult();
a.setAge("Roger"); //static type checker would complain
a.setName(42); //and here too
Tapi itu tidak mencegah Anda melakukan kesalahan bodoh seperti ini:
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
Masalahnya muncul ketika Anda menggunakan jenis yang sama untuk mewakili jenis informasi yang jelas berbeda. Saya sedang berpikir solusi yang baik untuk ini akan memperluas Integer
kelas, hanya untuk mencegah kesalahan logika bisnis, tetapi tidak menambah fungsionalitas. Sebagai contoh:
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));
Apakah ini dianggap praktik yang baik? Atau ada masalah teknik yang tidak terduga di jalan dengan desain yang ketat?
new Age(...)
objek, Anda tidak dapat menetapkannya secara salah ke variabel tipe Weight
di tempat lain. Ini mengurangi jumlah tempat di mana kesalahan bisa terjadi.
a.SetAge( new Age(150) )
Masih tidak mau mengkompilasi?