Maison > Java > javaDidacticiel > Article Soyez prudent lorsque vous retournez des options

Article Soyez prudent lorsque vous retournez des options

DDD
Libérer: 2024-09-19 06:19:02
original
724 Les gens l'ont consulté

Item  Seja criterioso ao retornar opcionais

Approches pré-Java 8 :

  • Throw exception : réservé aux situations exceptionnelles et coûteux en raison de la capture de trace de pile.
  • Return null : nécessite un code spécial pour gérer la possibilité de renvoyer null, ce qui peut provoquer des erreurs telles que NullPointerException.

L'approche Java 8 :

  • Présentation de la classe Optionnel, un conteneur immuable pouvant contenir une valeur ou être vide.
  • Évite l'utilisation de null et simplifie la gestion des valeurs manquantes sans lever d'exceptions.
  • Les méthodes peuvent renvoyer Facultatif pour représenter l'absence de valeur.

Avantages de l'utilisation de Facultatif :

  • Évite les exceptions et les problèmes avec null.
  • Permet au client de décider quoi faire lorsque la valeur est manquante (fournir la valeur par défaut, lever une exception, etc.).
  • Rend le code plus facile sans avoir besoin d'une gestion explicite des valeurs nulles.

Méthodes utiles de la classe Optionnelle :

  • Optional.of(value) : crée un Optionnel avec une valeur non nulle.
  • Optional.ofNullable(value) : crée un facultatif, mais accepte les valeurs nulles.
  • orElse(value) : renvoie une valeur par défaut si Facultatif est vide.
  • orElseThrow() : lève une exception si la valeur n'est pas présente.
  • map(), flatMap(), filter() : permettent la manipulation des valeurs au sein de l'optionnel.

Évitez d'impliquer des collections dans Facultatif :

  • Pour les types de conteneurs tels que des listes ou des tableaux, renvoyez des collections vides au lieu de Facultatif>.

Considérations relatives aux performances :

  • L'utilisation d'Optional a un coût en termes d'allocation d'objets.
  • Pour les types primitifs, utilisez OptionInt, OptionLong et OptionDouble pour éviter les coûts de marshaling.

Soyez prudent avec les autres utilisations de Facultatif :
Évitez de les utiliser comme clés ou valeurs de carte ou dans des collections.
Évitez de les utiliser comme champs d'instance à moins que cela ait du sens, comme dans les getters facultatifs.

Exemples de code
Exemple 1 : Utilisation de base de Facultatif

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

Copier après la connexion

Exemple 2 : Utiliser 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);
    }
}

Copier après la connexion

Exemple 3 : Facultatif avec les types primitifs

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

Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal