Site icon Blog Zenika

Java : @SuppressWarnings démystifié

L’annotation @SuppressWarnings permet de signaler au compilateur que l’on a conscience de réaliser une opération risquée, et qu’il peut donc arrêter de signaler un éventuel problème. Si l’annotation est standard, ses valeurs sont en revanche dépendantes du compilateur (d’après la JLS §9.6.1.5, seule « unchecked » est standard), car ils n’ont pas tous les mêmes capacités d’analyse statique du code.

L’annotation @SuppressWarnings possède la définition suivante :

  1. @Target(value={TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE})
  2. @Retention(value=SOURCE)
  3. public @interface SuppressWarnings

On voit qu’elle peut s’appliquer aux classes, à leurs méthodes et propriétés, et même aux variables locales et aux paramètres de méthodes.
On l’utilise comme ceci :

  1. @SuppressWarnings(« unchecked »)
  2. public List<User> getUsers()
  3. {
  4. // Cast non vérifié
  5. return (List<User>) new ArrayList();
  6. }

Voyons maintenant les valeurs supportées par javac et Eclipse.

Javac

Avec le compilateur standard de Sun, version 1.6.0_11, on peut obtenir les valeurs supportées à l’aide de la commande :

  1. javac -X

Ce qui donne :

Eclipse

Eclipse, qui possède son propre compilateur interne, fournit dans sa documentation la liste des valeurs qu’il reconnaît (je vous laisse l’explication originale en anglais) :

Du bon usage de @SuppressWarnings

Attention, la plupart du temps, le compilateur fait de son mieux pour vour prévenir d’erreurs de programmation pouvant mener à des bugs difficiles à détecter et corriger. Ne désactivez donc pas les alertes à moins de réellement savoir ce que vous faites !
Par exemple, il est fréquent d’oublier le champ SerialVersionUID dans les classes sérialisables. Eclipse le signale, et c’est agaçant ; de nombreux développeurs désactivent donc cet avertissement. Pourtant, il est plus prudent de le prendre en considération, afin d’éviter des problèmes d’incompatibilité entre différentes versions d’une même classe lors d’opérations réseau par exemple.
Si toutefois vous êtes certain de vouloir ignorer un warning, documentez votre choix. Les équipes de maintenance vous en seront reconnaissantes !

Quitter la version mobile