Logo

dev-resources.site

for different kinds of informations.

@Nullable et @NonNull

Published at
3/29/2024
Categories
java
kotlin
bestpractice
checkerframework
Author
fdupont
Author
7 person written this
fdupont
open
@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.
bestpractice Article's
30 articles in total
Favicon
From Bi-weekly to Every 5 Minutes: Modern Continuous Deployment Strategies
Favicon
Notación Big O - Python
Favicon
Docker Advance Part 2: Docker Logging
Favicon
Client Extension no Liferay
Favicon
Dockerfile Best Practices: How to Create Efficient Containers
Favicon
Microservice Best Practices: Scale your java microservices using virtual threads & async programming
Favicon
Design Patterns for C
Favicon
Mastering React Hooks: Best Practices for Efficient and Maintainable Code
Favicon
Why You Should End Your Source Files With a New Line
Favicon
Puppet best practice
Favicon
@Nullable et @NonNull
Favicon
Component best practice question.
Favicon
How to Use CodeWhisperer to Identify Issues and Use Suggestions to Improve Code Security in your IDE
Favicon
Mastering React: Best Practices for Cleaner and More Efficient Code
Favicon
AWS Well-Architected Review in Action
Favicon
Improving Code Quality in Java: Best Practices and Examples
Favicon
Mastering JavaScript Event Handling for Enhanced Frontend Functionality
Favicon
TIL: Best Practices for Handling Secret Keys in Sinatra - The Do's and Don'ts
Favicon
Enhancing Website Accessibility: A Guide for Supporting Users with Disabilities
Favicon
Proposal for a framework.json file in Angular applications
Favicon
Part 3: Component Structure - Building Reusable and Maintainable Components in React!
Favicon
Using useReducer and Redux Toolkit Together: A Powerful Combination for State Management
Favicon
Separation of concerns in React and React Native.
Favicon
REST-API Design Best Practices
Favicon
Flags In Programming
Favicon
10 Essential Best Practices for Writing High-Quality C++ Source Code
Favicon
Avoiding code duplication in styled components
Favicon
Es mala práctica renderizar JSX en React Hook?
Favicon
ReactJS Best Practices
Favicon
Why you should adopt Makefile in all of your projects

Featured ones: