Stellen Sie sich das folgende Szenario vor Long critId = Long.valueOf(criteriaIdentifier);
Wenn die Ansicht anfänglich geladen wird, kann criteriaIdentifier
null sein, danach setze ich den Wert abhängig von selectedItem
in der JSF-Ansicht.
Long.valueOf(criteriaIdentifier)
löst jedoch ein NumberFormatException
aus - Wenn die Zeichenfolge nicht als lang analysiert werden kann (d. H. null
).
Ich habe darüber nachgedacht, die ID standardmäßig auf -1
zu setzen, wollte aber wissen, ob es eine bessere Vorgehensweise gibt.
PS: Technisch gesehen kann criteriaIdentifier
nicht -1 sein, da diese Werte mit einem Sequenzgenerator aus der Datenbank festgelegt werden. Daher sollte ich wissen, dass -1 der Standardwert ist, und die Standardoperationen ordnungsgemäß ausführen < / em>
4 Antworten
Sie können das NumberUtils
von Apache Commons verwenden. Es ist null-sicher und Sie können optional einen Standardwert angeben.
Beispiel:
NumberUtils.toLong(null) = 0L
NumberUtils.toLong("") = 0L
NumberUtils.toLong("1") = 1L
NumberUtils.toLong(null, 1L) = 1L
NumberUtils.toLong("", 1L) = 1L
NumberUtils.toLong("1", 0L) = 1L
Weitere Informationen finden Sie unter API.
Long.valueOf(null)
wirft NumberFormatException
, nicht NullPointerException
.
In Java 8 haben Sie die Möglichkeit, eine Standardbewertung für eine nullfähige Inline deklarativ auszuwählen, z.
Long.valueOf(
Optional.ofNullable(criteriaIdentifier).orElseGet(() -> "-1")
)
Es ist ein wenig ausführlich, aber Sie können standardmäßig -1l
verwenden, wenn criteriaIdentifier
null
ist (keine zusätzlichen Abhängigkeiten erforderlich).
Ich gehe davon aus, dass KriterienIdentifier ein String ist. Du könntest benutzen org.apache.commons.lang3.math.NumberUtils.toLong (String, long) gibt den Standardwert an, wenn das String-Argument null ist. Oder Sie verwenden org.apache.commons.lang3.math.NumberUtils.toLong (String), der Null zurückgibt, wenn der String null ist.
Dies hängt von Ihrem Szenario ab, aber normalerweise gibt es Möglichkeiten, solche Probleme zu vermeiden.
Im Allgemeinen ist es üblich, IDs auf -1 zu setzen, aber ich denke nicht, dass es eine gute ist. Sie wissen, dass -1 in Ihrem Szenario kein möglicher Wert ist, aber wenn Sie nur den Typ Long berücksichtigen, ist dies ein gültiger Wert. Überall im Code müssen Sie also Tests implementieren, z. B. ob id!=-1
, wodurch der Code schwerer zu verstehen ist, und im Allgemeinen ist der Wert null
für dieses Szenario besser geeignet - Langes Objekt ohne Wert.
Wenn es zum Beispiel an der Methode lag, die eine ID empfängt und auf eine gültige ID wartet, wenn ich null erhalte, würde ich eine Ausnahme auslösen und den Aufrufer der Methode damit umgehen lassen. Wenn es sich beispielsweise um eine Web-API handelt (warum sollten Sie sonst einen String erhalten?), Können Sie einen HTTP-Fehler auslösen. Wenn Sie mit schlechten Argumenten umgehen möchten, geben Sie besser null zurück oder verwenden null als Standardwert.
Neue Fragen
java
Java ist eine Programmiersprache auf hoher Ebene. Verwenden Sie dieses Tag, wenn Sie Probleme haben, die Sprache selbst zu verwenden oder zu verstehen. Dieses Tag wird selten alleine verwendet und wird am häufigsten in Verbindung mit [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] und [maven] verwendet.