Ich habe festgestellt, dass es beenamplediscussion der relativen Vorzüge der geprüften Ausnahmen im Vergleich zu ungeprüften Ausnahmen in Java gibt, und es ist nicht meine Absicht, die gesamte Debatte erneut zu besuchen.unchecked Ausnahme, die besser gewesen wäre als überprüft
Eher möchte ich eine sehr spezifische Frage stellen, die mir in den Sinn kam, als ich Joshua Blochs Effektives Java, 2. Ausgabe las. Während ich las, bemerkte ich, dass Joshua in Punkt 59 ("Vermeiden unnötiger Verwendung von geprüften Ausnahmen") ein Beispiel in der Java-API gibt, wo eine geprüfte Ausnahme verwendet wird. Insbesondere in Object
:
protected Object clone()
throws CloneNotSupportedException
... und dann argumentiert, dass es stattdessen eine ungeprüfte Ausnahme sein sollte.
Wenn der Programmierer mit der API nicht besser geht, wäre eine unkontrollierte Ausnahme geeigneter. Ein Beispiel für eine Ausnahme, die diesen Test nicht besteht, ist CloneNotSupportedException. Es wird von Object.clone ausgelöst, das nur für Objekte aufgerufen werden sollte, die Cloneable implementieren (Element 11). In der Praxis hat der catch-Block fast immer den Charakter eines Assertionsfehlers. Die geprüfte Art der Ausnahme bietet dem Programmierer keinen Vorteil, erfordert jedoch Aufwand und verkompliziert Programme.
Ich sah dann zu sehen, ob er ein Beispiel für die Umkehrung hatte, aber ich konnte man nicht finden.
Also möchte ich fragen, ob jemand eine Beispiel-API in Java geben kann, die eine ungeprüfte Ausnahme verwendet, aber wo eine geprüfte Ausnahme eine bessere Wahl gewesen wäre, und erklären warum. Ein realistisches Beispiel wäre vorzuziehen, aber ich bin offen für ein künstliches Beispiel, wenn das die Dinge genauso gut veranschaulicht.
Bearbeiten: Diejenigen, die dafür gestimmt haben, dies als nicht-konstruktiv zu beenden, möchte ich klarstellen, dass ich nicht nach Meinung, Debatte, Argument oder ausführlicher Diskussion suche. Ich mache auch keine Umfrage. Ich suche eher nach Beispielen, die eine klare Analyse liefern, wie der Nutzen die Kosten überwiegt. (Implizit heißt das, dass es Kosten gibt.) Ich bin jedoch skeptisch, ob die Art dieser Frage das möglich macht. Ich denke, wenn Jon Skeet es nicht kann, ist es unwahrscheinlich, dass es getan werden kann. Vielleicht hast du recht. Schließen Sie, wenn Sie müssen.
Bearbeiten: Obwohl ich von der Antwort unbewegt bin, werde ich dies Jon nur für meine Annahme-Rate vergeben.
stimme ich voll und ganz zu. Wenn Sie programmieren und Sie "die Zone" eingeben, ist es ziemlich einfach, diese bestimmte Ausnahme zu verpassen, die darauf wartet, zu erscheinen und "pwn3d!" Entweder weil du vergessen hast es zu fangen oder weil du nicht wusstest, dass du es vielleicht fangen musst ... – Gamb
Danke für deine schnelle Antwort, Jon. Sie haben ein Beispiel gewählt, das mich nicht stört. Ich bin zufrieden, dass die Ausnahme im JavaDoc erwähnt wird, und ich weiß es zu schätzen, dass ich den Bereich wählen darf, in dem die Dinge behandelt werden.Glauben Sie, dass jedes Beispiel zum gleichen Kompromiss kommt? – pohl
@pohl: Angenommen, Sie rufen * 'Integer.parseInt' in einer Ihrer Methoden auf, vergessen aber, sie entweder zu fangen oder zu deklarieren. Zu diesem Zeitpunkt haben alle Anrufer der * th * -Methode keine Ahnung, was passieren könnte. Immer noch glücklich mit dieser Situation? –