Ich bin ein großer Fan der statischen Typprüfung. Es verhindert, dass Sie dumme Fehler wie diese machen:
// java code
Adult a = new Adult();
a.setAge("Roger"); //static type checker would complain
a.setName(42); //and here too
Aber es hindert dich nicht daran, so dumme Fehler zu machen:
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
Das Problem tritt auf, wenn Sie denselben Typ verwenden, um offensichtlich unterschiedliche Arten von Informationen darzustellen. Ich dachte, eine gute Lösung für dieses Problem wäre, die Integer
Klasse zu erweitern , nur um Fehler in der Geschäftslogik zu vermeiden, aber keine Funktionen hinzuzufügen. Beispielsweise:
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));
Wird dies als gute Praxis angesehen? Oder gibt es später unvorhergesehene technische Probleme mit einem derart restriktiven Design?
new Age(...)
Objekt deklariert haben, können Sie es an Weight
keiner anderen Stelle einer Variablen vom Typ zuordnen . Es reduziert die Anzahl der Stellen, an denen Fehler auftreten können.
a.SetAge( new Age(150) )
Kompilieren Sie noch nicht ?