DEV Community

Florent Dupont
Florent Dupont

Posted on

@Nullable et @NonNull

Le framework Checker propose plein d'annotations sympa à placer dans le code pour le sécuriser.

Il permet notamment de répondre au besoin de nullabilité des types (et des retours de fonction): Une fonctionnalité qui existe en Kotlin (par exemple String? qui défini un String possiblement null), mais qui n'existe pas en Java.

L'idée derrière tout ça est évidemment de faciliter l'intéropérabilité avec Kotlin, mais pas que !

En effet, les IDE sont capables de prendre en compte ces annotations et proposer des corrections de code pour éviter de potentielles erreurs.

Indiquer la potentielle nullité

Avec @Nullable, une fonction pourrait retourner null.

Par exemple:



@Nullable  
public String creerDossier(DemandeCreationDossier demande) {  
   // Dans cet exemple, la demande peut retourner null cas d'erreur métier
   var demande = creerDossier(demande)
   return demande;
}


Enter fullscreen mode Exit fullscreen mode

Si après le code appelant, un accès à la variable est réalisé, l'IDE nous informe que ce code peut lever une erreur et qu'il serait préférable de l'encadrer avec un test de nullité.

Image description

Indiquer l'impossibilité de nullité

Avec @NonNull, on indique qu'une fonction est assurée de ne pas retourner null.



@NonNull  
public String creerDossier(DemandeCreationDossier demande) throws BusinessException {  
   // Dans cet exemple, la demande est crée ou un BusinessException est levée en cas d'erreur métier
   verifierDemande(demande); 
   // vérification métiers, etc...
   var demande = creerDossier(demande)
   return demande;
}


Enter fullscreen mode Exit fullscreen mode

Si dans le code un test de nullité est réalisé, l'IDE nous informe que ce test est superflu.

Image description

Et également sur les variables ...

Evidemment cette approche fonctionne également sur les variables.



@NonNull String numeroDossier = null;

@Nullable Car car = findFirstCar(xxx);

Enter fullscreen mode Exit fullscreen mode




Pour aller plus loin :

  • Ces annotations ont beaucoup d'homonymes. C'est le package org.checkerframework.checker.nullness.qual qu'il faut utiliser
  • Le Checker Framework propose pleins d'autres annotations de contrôle, mais 🥱 la doc est très spartiate !
  • JSR 305 qui voulait standardiser ces annotations... qui n'a malheureusement jamais été validé
  • Bonne pratique de dev : Avoid Null Values if possible.

Sentry mobile image

Improving mobile performance, from slow screens to app start time

Based on our experience working with thousands of mobile developer teams, we developed a mobile monitoring maturity curve.

Read more

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay