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>

6
0x45 18 Apr. 2018 im 11:19

4 Antworten

Beste Antwort

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.

6
Jacob van Lingen 18 Feb. 2020 im 10:30

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).

API hier und hier.

3
Mena 18 Apr. 2018 im 08:33

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.

2
Yeti 18 Apr. 2018 im 08:24

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.

1
Veselin Davidov 18 Apr. 2018 im 08:26