Eine ziemlich dumme Frage. Angesichts des Codes:
public static int sum(String a, String b) /* throws? WHAT? */ {
int x = Integer.parseInt(a); // throws NumberFormatException
int y = Integer.parseInt(b); // throws NumberFormatException
return x + y;
}
Können Sie sagen, ob es sich um gutes Java handelt oder nicht? Ich spreche von NumberFormatException
einer ungeprüften Ausnahme. Sie müssen es nicht als Teil der sum()
Signatur angeben . Soweit ich weiß, soll die Idee von ungeprüften Ausnahmen nur signalisieren, dass die Implementierung des Programms falsch ist, und noch mehr ist es eine schlechte Idee, ungeprüfte Ausnahmen abzufangen, da es so ist , als würde man ein schlechtes Programm zur Laufzeit reparieren .
Würde jemand bitte klären, ob:
- Ich sollte
NumberFormatException
als Teil der Signatur der Methode angeben . - Ich sollte meine eigene geprüfte Ausnahme (
BadDataException
) definieren,NumberFormatException
innerhalb der Methode behandeln und sie erneut als auslösenBadDataException
. - Ich sollte meine eigene aktivierte Ausnahme (
BadDataException
) definieren, beide Zeichenfolgen wie reguläre Ausdrücke validieren und meine auslösen,BadDataException
wenn sie nicht übereinstimmen. - Deine Idee?
Update :
Stellen Sie sich vor, es ist kein Open-Source-Framework, das Sie aus irgendeinem Grund verwenden sollten. Sie sehen sich die Signatur der Methode an und denken: "OK, sie wirft nie". Dann hast du eines Tages eine Ausnahme. Es ist normal?
Update 2 :
Es gibt einige Kommentare, die besagen, dass mein sum(String, String)
Design schlecht ist. Ich stimme absolut zu, aber für diejenigen, die glauben, dass das ursprüngliche Problem niemals auftauchen würde, wenn wir gutes Design hätten, ist hier eine zusätzliche Frage:
Die Problemdefinition lautet wie folgt: Sie haben eine Datenquelle, in der Zahlen als String
s gespeichert sind . Diese Quelle kann eine XML-Datei, eine Webseite oder ein Desktop-Fenster mit 2 Bearbeitungsfeldern sein.
Ihr Ziel ist es, die Logik zu implementieren, die diese 2 String
s benötigt, sie in int
s konvertiert und das Meldungsfeld "Die Summe ist xxx" anzeigt.
Unabhängig davon, mit welchem Ansatz Sie dies entwerfen / implementieren, haben Sie diese zwei Punkte innerer Funktionalität :
- Ein Ort , wo Sie konvertieren
String
zuint
- Ein Ort, an dem Sie 2
int
s hinzufügen
Die Hauptfrage meines ursprünglichen Beitrags lautet:
Integer.parseInt()
erwartet, dass die richtige Zeichenfolge übergeben wird. Wenn Sie eine fehlerhafte Zeichenfolge übergeben , bedeutet dies, dass Ihr Programm falsch ist (nicht " Ihr Benutzer ist ein Idiot"). Sie müssen den Code implementieren, in dem Sie einerseits Integer.parseInt () mit MUST-Semantik haben und andererseits mit den Fällen einverstanden sein müssen, in denen die Eingabe falsch ist - SOLLTE Semantik .
Also, kurz: wie kann ich implementieren SOLL Semantik , wenn ich nur haben MUST Bibliotheken .