Table des matières
Pour le jugement nul d'Integer, vous pouvez utiliserOptional.ofNullable pour construire un facultatif, puis utiliser orElse(0) pour remplacer null par la valeur par défaut, puis effectuer l'opération +1. Pour une comparaison entre String et littéral, vous pouvez mettre le littéral devant, tel que "OK".equals(s), de sorte que même si s est nul, une exception de pointeur nul ne se produira pas et pour deux variables de chaîne qui peuvent l'être ; null Pour une comparaison égale, vous pouvez utiliser Objects.equals, qui effectuera un traitement nul.
Maison Java javaDidacticiel Comment gérer l'exception de pointeur nul en Java

Comment gérer l'exception de pointeur nul en Java

May 10, 2023 pm 05:43 PM
java

NullPointerException est l'exception la plus courante dans le code Java. Je classe ses scénarios les plus probables dans les 5 types suivants :

  • La valeur du paramètre est un type d'empaquetage tel que Integer. Lorsqu'elle est utilisée, une exception de pointeur nul se produit en raison du déballage automatique.

  • Une exception de pointeur nul se produit lors de la comparaison de chaînes ;

  • Les conteneurs tels que ConcurrentHashMap ne prennent pas en charge que la clé et la valeur soient nulles, et forcer une clé ou une valeur nulle entraînera une exception de pointeur nul ; l'objet contient B , après avoir obtenu B via les champs de l'objet A, une exception de pointeur nul se produit lors de la mise en cascade de la méthode de B sans vérifier le champ ; la Liste renvoyée par la méthode ou le service distant n'est pas vide mais nulle, et la Liste est appelé directement sans vérifier la valeur null. Une exception de pointeur null s'est produite dans la méthode.

  • private List<String> wrongMethod(FooService fooService, Integer i, String s, String t) {
        log.info("result {} {} {} {}", i + 1, s.equals("OK"), s.equals(t),
                new ConcurrentHashMap<String, String>().put(null, null));
        if (fooService.getBarService().bar().equals("OK"))
            log.info("OK");
        return null;
    }
    
    @GetMapping("wrong")
    public int wrong(@RequestParam(value = "test", defaultValue = "1111") String test) {
        return wrongMethod(test.charAt(0) == &#39;1&#39; ? null : new FooService(),
                test.charAt(1) == &#39;1&#39; ? null : 1,
                test.charAt(2) == &#39;1&#39; ? null : "OK",
                test.charAt(3) == &#39;1&#39; ? null : "OK").size();
    }
    
    class FooService {
        @Getter
        private BarService barService;
    
    }
    
    class BarService {
        String bar() {
            return "OK";
        }
    }
    Copier après la connexion

    L'idée de réparation est la suivante :

Pour le jugement nul d'Integer, vous pouvez utiliserOptional.ofNullable pour construire un facultatif, puis utiliser orElse(0) pour remplacer null par la valeur par défaut, puis effectuer l'opération +1. Pour une comparaison entre String et littéral, vous pouvez mettre le littéral devant, tel que "OK".equals(s), de sorte que même si s est nul, une exception de pointeur nul ne se produira pas et pour deux variables de chaîne qui peuvent l'être ; null Pour une comparaison égale, vous pouvez utiliser Objects.equals, qui effectuera un traitement nul.

  • Pour ConcurrentHashMap, puisque ni sa clé ni sa valeur ne prennent en charge null, le correctif consiste à ne pas y stocker null. La clé et la valeur de HashMap peuvent être stockées dans null, tandis que ConcurrentHashMap semble être une version thread-safe de HashMap, mais elle ne prend pas en charge la clé et la valeur de valeur null. C'est un endroit où des malentendus sont faciles à se produire.

  • Pour les appels en cascade comme fooService.getBarService().bar().equals("OK"), il existe de nombreux endroits où null doit être vérifié, y compris les valeurs de retour des méthodes fooService et getBarService() , et les valeurs de retour de la méthode bar string. Si vous utilisez if-else pour vérifier null, vous aurez peut-être besoin de plusieurs lignes de code, mais si vous utilisez Facultatif, une ligne de code suffit.

  • Pour la liste renvoyée par rightMethod, puisqu'il est impossible de confirmer si elle est nulle, avant d'appeler la méthode size pour obtenir la taille de la liste, vous pouvez également utiliserOptional.ofNullable pour envelopper la valeur de retour, puis transmettre .orElse (Collections.emptyList()) L'implémentation obtient une liste vide lorsque la liste est nulle et appelle enfin la méthode size.

  • private List<String> rightMethod(FooService fooService, Integer i, String s, String t) {
        log.info("result {} {} {} {}", Optional.ofNullable(i).orElse(0) + 1, "OK".equals(s), Objects.equals(s, t), new HashMap<String, String>().put(null, null));
        Optional.ofNullable(fooService)
                .map(FooService::getBarService)
                .filter(barService -> "OK".equals(barService.bar()))
                .ifPresent(result -> log.info("OK"));
        return new ArrayList<>();
    }
    
    @GetMapping("right")
    public int right(@RequestParam(value = "test", defaultValue = "1111") String test) {
        return Optional.ofNullable(rightMethod(test.charAt(0) == &#39;1&#39; ? null : new FooService(),
                test.charAt(1) == &#39;1&#39; ? null : 1,
                test.charAt(2) == &#39;1&#39; ? null : "OK",
                test.charAt(3) == &#39;1&#39; ? null : "OK"))
                .orElse(Collections.emptyList()).size();
    }
    Copier après la connexion

  • Nous mettons à jour respectivement le nom, l'âge et le pseudo en fonction des besoins de l'entreprise : pour le nom, nous pensons que le client passe null afin de remettre le nom à vide. Pour permettre une telle opération, utilisez l'Optionnel. orElse, première méthode Convertissez simplement la clé en une chaîne vide.
  • Pour l'âge, nous pensons que si le client souhaite mettre à jour l'âge, il doit dépasser un âge valide. Il n'y a pas d'opération de réinitialisation pour l'âge. Vous pouvez utiliser la méthode Facultative orElseThrow pour lancer une IllegalArgumentException lorsque la valeur est vide. .

  • Pour le pseudo, comme le nom dans la base de données ne peut pas être nul, vous pouvez définir en toute sécurité le pseudo sur invité plus le nom retiré de la base de données.

  • @PostMapping("right")
    public UserEntity right(@RequestBody UserDto user) {
        if (user == null || user.getId() == null)
            throw new IllegalArgumentException("用户Id不能为空");
    
        UserEntity userEntity = userEntityRepository.findById(user.getId())
                .orElseThrow(() -> new IllegalArgumentException("用户不存在"));
    
        if (user.getName() != null) {
            userEntity.setName(user.getName().orElse(""));
        }
        userEntity.setNickname("guest" + userEntity.getName());
        if (user.getAge() != null) {
            userEntity.setAge(user.getAge().orElseThrow(() -> new IllegalArgumentException("年龄不能为空")));
        }
        return userEntityRepository.save(userEntity);
    }
    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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Programme Java pour trouver le volume de la capsule Programme Java pour trouver le volume de la capsule Feb 07, 2025 am 11:37 AM

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

See all articles