Heim  >  Artikel  >  Java  >  Artikel Seien Sie vorsichtig, wenn Sie Optionen zurücksenden

Artikel Seien Sie vorsichtig, wenn Sie Optionen zurücksenden

DDD
DDDOriginal
2024-09-19 06:19:02610Durchsuche

Item  Seja criterioso ao retornar opcionais

Ansätze vor Java 8:

  • Ausnahme auslösen: für Ausnahmesituationen reserviert und aufgrund der Stack-Trace-Erfassung teuer.
  • Null zurückgeben: erfordert speziellen Code, um mit der Möglichkeit der Rückgabe von Null umzugehen, was zu Fehlern wie NullPointerException führen kann.

Der Java 8-Ansatz:

  • Einführung der optionalen Klasse, eines unveränderlichen Containers, der einen Wert enthalten oder leer sein kann.
  • Vermeidet die Verwendung von Null und vereinfacht die Behandlung fehlender Werte, ohne Ausnahmen auszulösen.
  • Methoden können Optional zurückgeben, um das Fehlen eines Werts darzustellen.

Vorteile der Verwendung von Optional:

  • Vermeidet Ausnahmen und Probleme mit null.
  • Ermöglicht dem Client zu entscheiden, was zu tun ist, wenn der Wert fehlt (Standardwert bereitstellen, Ausnahme auslösen usw.).
  • Erleichtert den Code, ohne dass eine explizite Nullbehandlung erforderlich ist.

Nützliche Methoden der Optional-Klasse:

  • Optional.of(value): Erstellt ein Optional mit einem Wert ungleich Null.
  • Optional.ofNullable(value): Erstellt ein Optional, akzeptiert aber Nullwerte.
  • orElse(value): gibt einen Standardwert zurück, wenn Optional leer ist.
  • orElseThrow(): löst eine Ausnahme aus, wenn der Wert nicht vorhanden ist.
  • map(), flatMap(), filter(): erlauben die Manipulation von Werten innerhalb des Optionalen.

Vermeiden Sie die Einbeziehung von Sammlungen in Optional:

  • Für Containertypen wie Listen oder Arrays geben Sie leere Sammlungen anstelle von Optional> zurück.

Leistungsaspekte:

  • Die Verwendung von Optional ist mit Kosten in Bezug auf die Objektzuweisung verbunden.
  • Verwenden Sie für primitive Typen OptionalInt, OptionalLong und OptionalDouble, um Marshalling-Kosten zu vermeiden.

Seien Sie vorsichtig bei anderen Verwendungen von Optional:
Vermeiden Sie die Verwendung als Kartenschlüssel oder -werte oder in Sammlungen.
Vermeiden Sie die Verwendung als Instanzfelder, es sei denn, dies ist sinnvoll, z. B. in optionalen Gettern.

Codebeispiele
Beispiel 1: Grundlegende Verwendung von Optional

import java.util.Optional;

public class ExemploOptional {
    public static Optional<String> encontrarNome(String[] nomes, String nomeBuscado) {
        for (String nome : nomes) {
            if (nome.equalsIgnoreCase(nomeBuscado)) {
                return Optional.of(nome);
            }
        }
        return Optional.empty();  // Retorna Optional vazio se não encontrar o nome
    }

    public static void main(String[] args) {
        String[] nomes = {"João", "Maria", "Ana"};
        Optional<String> nomeEncontrado = encontrarNome(nomes, "Maria");

        nomeEncontrado.ifPresent(nome -> System.out.println("Nome encontrado: " + nome));
        System.out.println(nomeEncontrado.orElse("Nome não encontrado"));
    }
}

Beispiel 2: Verwendung von orElseThrow

import java.util.Optional;

public class ExemploOrElseThrow {
    public static Optional<Integer> buscarIdade(String nome) {
        if (nome.equals("João")) {
            return Optional.of(30);
        }
        return Optional.empty();  // Retorna Optional vazio se o nome não for "João"
    }

    public static void main(String[] args) {
        Optional<Integer> idade = buscarIdade("Maria");

        // Lança uma exceção se o valor não estiver presente
        int valorIdade = idade.orElseThrow(() -> new IllegalArgumentException("Idade não encontrada!"));
        System.out.println("Idade: " + valorIdade);
    }
}

Beispiel 3: Optional mit primitiven Typen

import java.util.OptionalInt;

public class ExemploOptionalInt {
    public static OptionalInt buscarIdade(String nome) {
        if (nome.equals("João")) {
            return OptionalInt.of(30);
        }
        return OptionalInt.empty();  // Retorna OptionalInt vazio se o nome não for "João"
    }

    public static void main(String[] args) {
        OptionalInt idade = buscarIdade("João");

        if (idade.isPresent()) {
            System.out.println("Idade encontrada: " + idade.getAsInt());
        } else {
            System.out.println("Idade não encontrada");
        }
    }
}

Das obige ist der detaillierte Inhalt vonArtikel Seien Sie vorsichtig, wenn Sie Optionen zurücksenden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Einzelnummer INächster Artikel:Einzelnummer I