Soy un gran fanático de la verificación de tipos estáticos. Le impide cometer errores estúpidos como este:
// java code
Adult a = new Adult();
a.setAge("Roger"); //static type checker would complain
a.setName(42); //and here too
Pero no te impide cometer errores estúpidos como este:
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
El problema surge cuando usa el mismo tipo para representar evidentemente diferentes tipos de información. Estaba pensando que una buena solución para esto sería extender la Integer
clase, solo para evitar errores de lógica de negocios, pero no para agregar funcionalidad. Por ejemplo:
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));
¿Se considera esto una buena práctica? ¿O hay problemas de ingeniería imprevistos en el futuro con un diseño tan restrictivo?
new Age(...)
objeto, no puede asignarlo incorrectamente a una variable de tipo Weight
en ningún otro lugar. Reduce la cantidad de lugares donde pueden ocurrir errores.
a.SetAge( new Age(150) )
Todavía no se compilará?