Optional ist in Java ein Containerobjekt, das einen Wert ungleich Null enthalten oder leer sein kann. Sein Hauptzweck besteht darin, Nullzeigerausnahmen beim Schreiben von Code zu vermeiden.
Die vollständige Verwendung von Optional in Java 8 ist wie folgt:
Sie können ein optionales Objekt mit Nicht-Null-Werten über die of()-Methode erstellen, zum Beispiel:
Optional<String> optional = Optional.of("value");
Das können Sie Erstellen Sie auch ein optionales Objekt über die ofNullable()-Methode, das einen Wert enthält, der leer sein kann, zum Beispiel:
Optional<String> optional = Optional.ofNullable(null);
Sie können den Nicht-Null-Wert im optionalen Objekt über get abrufen ()-Methode, zum Beispiel:
String value = optional.get();
Wenn der Wert im optionalen Objekt leer ist, löst der Aufruf der get()-Methode eine NoSuchElementException aus. Daher ist es am besten, vor dem Aufruf der get()-Methode die isPresent()-Methode zu verwenden, um zu bestimmen, ob das optionale Objekt einen Wert ungleich Null enthält.
Sie können die Methode isPresent() verwenden, um zu bestimmen, ob das optionale Objekt einen Nicht-Null-Wert enthält, zum Beispiel:
if (optional.isPresent()) { // Optional对象包含非空值 } else { // Optional对象为空 }
Sie können auch ifPresent verwenden ()-Methode, wenn das optionale Objekt einen Nicht-Null-Wert enthält. Führen Sie einige Operationen aus, wie zum Beispiel:
optional.ifPresent(value -> System.out.println(value));
Sie können die orElse()-Methode verwenden, um den Wert oder abzurufen Standardwert im optionalen Objekt, wie zum Beispiel:
String value = optional.orElse("default");
Wenn der Wert im optionalen Objekt leer ist, wird der angegebene Standardwert zurückgegeben.
Sie können die Methode orElseThrow() verwenden, um den Wert im optionalen Objekt abzurufen oder eine Ausnahme auszulösen, zum Beispiel:
String value = optional.orElseThrow(() -> new RuntimeException("value is null"));
Wenn der Wert im optionalen Das Objekt ist leer. Die angegebene Ausnahme wird ausgelöst.
Sie können die Methode map() verwenden, um den Wert im optionalen Objekt in einen anderen Werttyp umzuwandeln, zum Beispiel:
Optional<Integer> optional = Optional.of("123").map(Integer::parseInt);
Wenn der Wert im optionalen Objekt leer ist , geben Sie ein optionales Nullobjekt zurück.
Sie können die Methode filter() verwenden, um den Wert im optionalen Objekt zu filtern, zum Beispiel:
Optional<String> optional = Optional.of("value").filter(value -> value.startsWith("v"));
Wenn der Wert im optionalen Objekt die angegebenen Filterbedingungen nicht erfüllt wird ein leeres optionales Objekt zurückgegeben.
Wir haben die Funktionen von Java 8 eingeführt. Java 9 fügt der optionalen Klasse drei Methoden hinzu: or(), ifPresentOrElse() und stream(). Die
or()-Methode ähnelt orElse() und orElseGet() darin, dass beide alternative Fälle bereitstellen, wenn das Objekt leer ist. Der Rückgabewert von or() ist ein weiteres optionales Objekt, das vom Parameter „Supplier“ erzeugt wird.
Wenn das Objekt einen Wert enthält, wird der Lambda-Ausdruck nicht ausgeführt:
@Test public void whenEmptyOptional_thenGetValueFromOr() { User result = Optional.ofNullable(user) .or( () -> Optional.of(new User("default","1234"))).get(); assertEquals(result.getEmail(), "default"); }
Wenn im obigen Beispiel die Benutzervariable null ist, wird eine Option zurückgegeben, die das Benutzerobjekt enthält, dessen E-Mail „Standard“ ist. Die Methode ifPresentOrElse() erfordert zwei Parameter: einen Consumer und einen Runnable. Wenn das Objekt einen Wert enthält, wird die Aktion des Verbrauchers ausgeführt, andernfalls wird das Runnable ausgeführt.
Wenn Sie eine bestimmte Aktion ausführen möchten, wenn ein Wert vorhanden ist, oder einfach verfolgen möchten, ob ein bestimmter Wert definiert ist, ist diese Methode sehr nützlich:
Optional.ofNullable(user).ifPresentOrElse( u -> logger.info("User is:" + u.getEmail()), () -> logger.info("User not found"));
Ergänzung: Optionale Kontroverse
Mein Vorschlag ist also: Wenn Sie nicht wissen, ob Sie Optional verwenden sollen, verwenden Sie es noch nicht.
Hier sind einige Referenzszenarien für die Verwendung von Optional:
/** * 查询订单,要么返回订单,要么异常 */ public Order getOrderByIdOrExcept(Long orderId){ Order order = orderMapper.getOrderById(orderId); if(order == null){ throw new BizException("根据单号" + orderId + "未查询到订单!"); } return order; } /** * 查询订单,值可能为null */ public Optional<Order> getOrderById(Long orderId){ Order order = orderMapper.getOrderById(orderId); return Optional.ofNullable(order); }Da der nachfolgende Verarbeitungscode auf Bestelldaten basiert, kann die Bestellung nicht ausgeführt werden erhalten werden Daten und Code können nicht ausfallen, daher ist es in den meisten Fällen besser, die Methode getOrderByIdOrExcept zu verwenden, die NPE vermeidet und den Codierungsaufwand erhöht!
Das obige ist der detaillierte Inhalt vonWas sind die häufig verwendeten optionalen Methoden in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!