Heim > Java > javaLernprogramm > Hauptteil

Artikel Seien Sie vorsichtig, wenn Sie Optionen zurücksenden

DDD
Freigeben: 2024-09-19 06:19:02
Original
594 Leute haben es durchsucht

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"));
    }
}

Nach dem Login kopieren

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);
    }
}

Nach dem Login kopieren

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");
        }
    }
}

Nach dem Login kopieren

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!

Quelle:dev.to
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!