2016-12-22 2 views
2

Vor Java 8 müssen wir normalerweise wie folgt vorgehen, um für Null Werte schnell zu versagen.Java 8 Optional So definieren Sie eine Fehlermeldung von NullPointerException

Objects.requireNonNull(pointer, "Your Error Message"); 

Nach Java 8 Dokumentation wird Optional.ofNullPointerException werfen, wenn übergebene Parameter null ist.

// Optional.of - throws NullPointerException if passed parameter is null 
Optional<Integer> b = Optional.of(value2); 

Gibt es eine Möglichkeit Fehlermeldung für NullPointerException in Java 8 Optional zu definieren?

+0

@ 4castle Ja, habe den Punkt, danke. Aber immer noch ein wenig unbefriedigend, warum sie ".of" -Methode in die Optionale Klasse für NullPointerException setzen schnell scheitern. Zumindest würden sie optionale Parameter für Fehlermeldungen wie "Objects.requireNonNull" bereitstellen. –

+1

Als ich "fail last" sagte, meinte ich, dass Sie belastete Fehler werfen sollten, bis Sie versuchen, den Wert vom 'Optional' am Ende wiederzubekommen. Sie haben auch die Möglichkeit, 'Optional.ofNullable' zu ​​verwenden. – 4castle

+4

Sie haben das nicht eingegeben, weil die Parameterüberprüfung nicht wirklich Aufgabe von 'Optional' ist - sie modelliert die" Optionalität "(um sie spezifisch von der" Null-Fähigkeit "zu unterscheiden). Wenn Sie einen Vertrag durchsetzen wollen, tun Sie dies, bevor Sie zu optional oder optional kommen, nur dann fehlschlagen, wenn Sie ihn auffordern, eine Instanz mit einer Null von seiner explizit nicht nullbaren Methode zu erstellen. – pvg

Antwort

8

Sie könnten immer Optional.of(Objects.requireNonNull(pointer, "message")) schreiben.

4

Für die Klasse Optional wird normalerweise erwartet, dass Sie sich nicht darum kümmern, Fehler zu werfen, bis der Wert extrahiert ist. Sie können orElseThrow verwenden, wenn Sie versuchen, den Wert abzurufen:

Optional.ofNullable(pointer) 
     ... 
     ... 
     .orElseThrow(() -> new NullPointerException("message")); 

Die Optional Klasse nicht die bestehenden Methoden gemeint ist dafür spezifische null Kontrolle zu ersetzen.

Verwandte Themen