Eu sou um grande fã de verificação de tipo estático. Impede que você cometa erros estúpidos como este:
// java code
Adult a = new Adult();
a.setAge("Roger"); //static type checker would complain
a.setName(42); //and here too
Mas isso não impede que você cometa erros 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
O problema ocorre quando você está usando o mesmo tipo para representar obviamente diferentes tipos de informações. Eu estava pensando que uma boa solução para isso seria estender a Integer
classe, apenas para evitar erros de lógica de negócios, mas não para adicionar funcionalidade. Por exemplo:
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));
Isso é considerado uma boa prática? Ou existem problemas imprevistos de engenharia no caminho com um design tão restritivo?
new Age(...)
objeto, você não poderá atribuí-lo incorretamente a uma variável do tipo Weight
em nenhum outro local. Reduz o número de lugares onde erros podem acontecer.
a.SetAge( new Age(150) )
Ainda não será compilado?