Umgang mit NullPointerException in Java

Als Entwickler sind wir alle darauf gestoßen NullPointerException beim Schreiben von Code.
Um dies zu vermeiden, ist es notwendig, an Ort und Stelle zu setzen steuert der „Nichtigkeit“ vor dem Zugriff auf die Wert eines Objektes.

NullPointerException

Außerdem kann jedes Objekt einen Wert enthalten oder nicht. Wenn dies der Fall ist, wird sein Wert im Speicher gespeichert und die Variable, die wir verwenden, hat einen Verweis auf dieses Objekt. Wenn das Objekt keinen Wert enthält, wird es durch „Null“ ersetzt, was auf das Fehlen von Wert hinweist.

Um eine NullPointerException viel sauberer zu behandeln, stellt Java8 eine optionale Klasse bereit.

Optional ist im Grunde ein “Container”-Objekt, das einen Wert enthalten kann oder nicht nicht null. Es ist entweder dafür ausgelegt, einen Wert zu speichern oder „leer“ zu sein. Es ermöglicht die implizite Überprüfung von Nullwerten und eine gute Anzahl von APIs, um mit Nullwerten umzugehen, für jedes Objekt, das durch a dargestellt wird Optional. Das bedeutet, dass der Entwickler nicht länger dafür verantwortlich ist, explizit auf „Nullwerte“ zu prüfen, die von der optionalen Klasse behandelt werden.

Sehen wir uns also schnell die verschiedenen APIs an, die für die Erstellung und den Zugriff verfügbar sind. Optional für jedes Objekt verwenden wir beispielsweise diese „Produkt“-Klasse:

public class Product {
    private String name;
    private Seller seller;
}

1 – von () :

Der erste Ansatz zum Erstellen von Optionals ist die Verwendung der API .of()wobei ein Verweis auf ein Nicht-Null-Objekt übergeben wird: Im Falle einer Nichtigkeit löst die Methode die Ausnahme NullPointerException aus:

Product product = new Product();
Optional<Product> productOptional = Optional.of(product);
Lesen Sie auch  Das Café Spencer's Place in Surprise bietet Jobmöglichkeiten

2 – ofNullable() :

Wenn das „Produkt“ null sein darf, würden wir anstelle der .of()-API die Methode verwenden .ofNullable(). Sie haben die gleiche Leistung, wenn der Wert ungleich Null ist:

Product product = new Product();
Optional<Product> productOptional = Optional.ofNullable(product);

3 – Leer :

Und schließlich, anstatt eine vorhandene Referenzvariable zu umschließen (Null oder nicht null), können wir im Kontext eines Optional einen Nullwert erstellen. Es ist ein bisschen wie ein leerer Container was eine leere Instanz von Optional zurückgibt:

Optional<Product> productEmpty = Optional.empty();

Es ist Zeit, auf die zuzugreifen Wert des Objekts, sobald wir Optionals for all erstellt haben Referenz des Objekts.

erhalten() :

Vor dem Zugriff auf den Wert über die API get()müssen wir noch mithilfe der API überprüfen, ob der Wert vorhanden ist isPresent()Ansonsten, get() wird eine Ausnahme auslösen NoSuchElementException.
Funktion isPresent() liefert „true“, wenn der Wert vorhanden ist, sonst false:

Product product = new Product();
Optional<Product> productOptional = Optional.ofNullable(product);
if (productOptional.isPresent() {
   System.out.println(productOptional.get());
}

Eine andere Möglichkeit, das Vorhandensein eines Werts in der optionalen Instanz zu überprüfen, ist die Verwendung ifPresent() Wie nachfolgend dargestellt. In diesem Szenario ist die Ausgabe an das Terminal leer, da die Instanz Optional ist leer :

Optional<Product> productEmpty = Optional.empty();
productEmpty.ifPresent(product -> System.out.println(productOptional.get()));
Lesen Sie auch  Waldbrandrauch reagiert mit Stadtverschmutzung und schafft neue giftige Luftgefahr

Wenn wir verwenden get() mit einem leeren Optional wird beim Aufrufen der Methode a ausgelöst NoSuchElementException aber in einigen Fällen statt derAusnahmemöchten wir den Standardwert zurückgeben.
Verwenden der API orElse()können wir dies erreichen:

Product productDefault = new Product();
Optional<Product> productEmpty = Optional.empty();
System.out.println(productEmpty.orElse(productDefault));

Anstatt den Standardwert direkt als Argument bereitzustellen, verwenden Sie orElseGet() Wir können eine „Lieferanten“-Schnittstelle verwenden und das Ergebnis zurückgeben, wenn der Wert mit Optional nicht vorhanden ist:

Optional<Product> productEmpty = Optional.empty();
System.out.println(productEmpty.orElseGet(() -> new Product()));

Anstatt einen Wert zurückzugeben Alternative oder standardmäßig (wie wir im vorherigen Beispiel gesehen haben) möchten wir manchmal eine Ausnahme auslösen, um die Nichtverfügbarkeit des Werts at anzuzeigenAccessorwas mit erreicht werden kann orElseThrow() :

Optional<Product> productEmpty = Optional.empty();
productEmpty.orElseThrow (new CustomException ("Product not found"));

Die Optional-Klasse enthält viele APIs, die das Leben einfacher machen.
Beginnen Sie also damit, die optionale Klasse zu verwenden, wo immer Sie können, und vermeiden Sie das Lösen von Problemen mit NullPointerException unnötig.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.