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 , Weightbaş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?