Statik tip kontrol hayranıyım. Bunun gibi aptalca hatalar yapmanı engeller:
// java code
Adult a = new Adult();
a.setAge("Roger"); //static type checker would complain
a.setName(42); //and here too
Ancak bu gibi aptalca hatalar yapmanıza engel olmaz:
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
Sorun, açıkça farklı türde bilgileri temsil etmek için aynı türü kullandığınızda ortaya çıkar. Bunun için iyi bir çözüm Integer
, sadece iş mantığı hatalarını önlemek, ancak işlevsellik eklemek için , sınıfı genişletmek olacağını düşünüyordum . Örneğin:
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));
Bu iyi bir uygulama mıdır? Yoksa böyle kısıtlayıcı bir tasarımla yolda beklenmedik mühendislik problemleri var mı?
new Age(...)
Nesnenizi bildirdikten sonra , Weight
başka bir yerde yanlış bir tür değişkenine yanlış atayamazsınız . Hataların meydana gelebileceği yer sayısını azaltır.
a.SetAge( new Age(150) )
hala derlemek?