Ich könnte ein paar gute Dinge über Generika sagen , aber das war nicht die Frage. Ich könnte mich beschweren, dass sie zur Laufzeit nicht verfügbar sind und nicht mit Arrays funktionieren, aber das wurde bereits erwähnt.
Ein großes psychologisches Ärgernis: Ich gerate gelegentlich in Situationen, in denen Generika nicht zum Funktionieren gebracht werden können. (Arrays sind das einfachste Beispiel.) Und ich kann nicht herausfinden, ob Generika den Job nicht machen können oder ob ich nur dumm bin. Ich hasse es, dass. So etwas wie Generika sollte immer funktionieren. Jedes Mal, wenn ich mit Java-the-language nicht tun kann, was ich will, weiß ich, dass ich das Problem bin, und ich weiß, dass ich es irgendwann schaffen werde, wenn ich einfach weiter pushe. Wenn ich mit Generika zu hartnäckig werde, kann ich viel Zeit verschwenden.
Das eigentliche Problem ist jedoch, dass Generika zu viel Komplexität für zu wenig Gewinn hinzufügen. In den einfachsten Fällen kann es mich davon abhalten, einen Apfel zu einer Liste mit Autos hinzuzufügen. Fein. Aber ohne Generika würde dieser Fehler eine ClassCastException zur Laufzeit sehr schnell auslösen und wenig Zeit verschwenden. Wenn ich ein Auto mit einem Kindersitz hinzufüge, in dem sich ein Kind befindet, muss ich beim Kompilieren warnen, dass die Liste nur für Autos mit Kindersitzen gilt, die Babyschimpansen enthalten? Eine Liste einfacher Objektinstanzen scheint eine gute Idee zu sein.
Generierter Code kann viele Wörter und Zeichen enthalten, viel zusätzlichen Platz beanspruchen und viel länger zum Lesen brauchen. Ich kann viel Zeit damit verbringen, den ganzen zusätzlichen Code zum Laufen zu bringen. Wenn es so ist, fühle ich mich wahnsinnig schlau. Ich habe auch mehrere Stunden oder mehr meiner eigenen Zeit verschwendet und ich muss mich fragen, ob irgendjemand sonst jemals in der Lage sein wird, den Code herauszufinden. Ich möchte es zur Wartung an Leute weitergeben können, die entweder weniger schlau sind als ich oder die weniger Zeit zum Verschwenden haben.
Auf der anderen Seite (da habe ich mich ein bisschen aufgewickelt und das Gefühl, dass ich ein wenig ausbalancieren muss) ist es schön, wenn man einfache Sammlungen und Karten verwendet, um sie hinzuzufügen, zu setzen und beim Schreiben überprüft zu bekommen, und normalerweise fügt es nicht viel hinzu Komplexität des Codes ( wenn jemand anders die Sammlung oder Karte schreibt) . Und Java kann das besser als C #. Es scheint, als würde keine der C # -Sammlungen, die ich verwenden möchte, jemals mit Generika umgehen. (Ich gebe zu, ich habe einen seltsamen Geschmack in Sammlungen.)