Question

je me suis déplacé vers une nouvelle machine qui a le dernier compilateur Java de Sun et a remarqué quelques avertissements dans le code existant Java 6. L'Eclipse IDE, a suggéré que j'annote la mission avec:

@SuppressWarnings("rawtypes")

Par exemple:

class Foo<T> {
...
}
...
@SuppressWarnings("rawtypes")
Foo foo = new Foo();

Quand je suis revenu à la machine avec le compilateur ancien (JDK 1.6.0_20), je l'ai remarqué que ce compilateur avertit maintenant plus au sujet de la suppression des avertissements « de rawtypes », affirmant que cette suppression est non pris en charge et propose de le remplacer avec @SuppressWarnings ( "sans contrôle"). De plus, il y avait des endroits où le nouveau compilateur par défaut, m'a fait de mettre les deux « non vérifiées » et « rawtypes » - la compilation de ce code avec le compilateur ancien reproduit le même avertissement

.

Comment puis-je appliquer la compatibilité arrière / avant entre les deux, de sorte que ni le compilateur produit des avertissements?

Était-ce utile?

La solution

Vous pouvez utiliser la @SuppressWarnings("unchecked") qui est pris en charge à la fois par le compilateur Eclipse et javac.

Mais rappelez-vous l'annotation @SuppressWarnings est utilisé par votre compilateur qui peut avoir ses propres valeurs. Les seules forces JLS le compilateur de comprendre les valeurs « sans contrôle » et « désapprouvée » (pour l'instant).

  

vendeurs du compilateur doivent documenter les noms d'avertissement qu'ils prennent en charge conjointement avec ce type d'annotation. Ils sont encouragés à coopérer pour faire en sorte que les mêmes noms travaillent sur plusieurs compilateurs .

Si vous utilisez Helios, vous devez définir une option spécifique pour permettre @SuppressWarnings("unchecked") au lieu de @SuppressWarnings("rawtypes"),

  

Dans le cas où il est impossible de mettre à jour le code avec le nouveau jeton, la propriété système suppressRawWhenUnchecked=true peut être réglé lors du démarrage Eclipse.


Ressources:


EDIT: Voici l'article de Knol maintenant disponible qui a été utilisé comme référence, écrit à l'origine par Alex Miller .

  

@SuppressWarnings Annotation en Java

     

annotation standard pour supprimer divers avertissements

     

L'annotation SuppressWarnings a été ajouté comme une annotation standard dans Java SE 5.

     

Définition

     

@ SuppressWarnings annotation est définie dans la spécification du langage Java section 9.6.1.5 . Cet article stipule:

     
    

Le contrôle du type d'annotation supports de SuppressWarnings programmeur sur les avertissements autrement émis par le compilateur Java. Il contient un seul élément qui est un tableau de String. Si une déclaration de programme est annoté avec le @SuppressWarnings(value = {S1, ... , Sk}) d'annotation, puis un compilateur Java ne doit pas signaler tout avertissement identifié par l'un des S1, ..., Sk si cet avertissement aurait été généré à la suite de la déclaration annotée ou l'une de ses parties .

         

avertissements non contrôlés sont identifiés par la chaîne "unchecked".

  
     

La suite sur rel="noreferrer"> @Deprecation mentionne également que ces avertissements peuvent être supprimés avec @SuppressWarnings("deprecation").

     

Types d'avertissement valides

     

Les deux chaînes d'avertissement qui sont mentionnées dans la spécification elle-même sont « sans contrôle » et « dévalorisation ». Cependant, le Sun JDK utilise un ensemble plus large de chaînes dans le compilateur. Vous pouvez déterminer l'ensemble actuel en exécutant:

javac -X
     

qui vous montrera (entre autres) les paramètres valides pour -Xlint.

     

Par exemple, Sun JDK 1.5 montre:

     
      
  • tous - Supprimer tous les avertissements de ce code
  •   
  • deprecation - avertissements en utilisant le code de Suppress dépréciée
  •   
  • sans contrôle - les avertissements d'un appel Suppress sans contrôle ou une distribution non contrôlée
  •   
  • fallthrough - avertissements si un interrupteur Suppress tombe à travers sans trouver un cas valide (et non par défaut)
  •   
  • chemin -
  •   
  • série - avertissements Supprimer si une classe Serializable ne définit pas serialVersionUID
  •   
  • enfin - les avertissements de retour dans Suppress finally (qui Ignore retour à l'essai)
  •   
     

Et Sun JDK 1.6 ajoute:

     
      
  • Casting
  •   
  • divzero - supprimer les avertissements si division entière par zéro est détecté
  •   
  • vide
  •   
  • overrides
  •   
  • aucun
  •   
     

et IDEs outils d'analyse statique prennent généralement en charge un grand nombre d'autres valeurs possibles pour @SuppressWarnings. Ces valeurs correspondent à des contrôles d'analyse de statique spécifique effectuée par l'EDI.

     

Eclipse

     

Les valeurs d'alerte pour Eclipse Eclipse 3.3 sont documentée dans les docs JDT .

     
      
  • tous - Supprimer tous les avertissements
  •   
  • boxe - avertissements Suppress par rapport aux opérations de boxe / unboxing
  •   
  • cast - avertissements relatifs à Suppress opérations de la distribution
  •   
  • dep-ann - supprimer les avertissements par rapport à l'annotation Obsolète
  •   
  • deprecation - supprimer les avertissements par rapport à deprecation
  •   
  • fallthrough - avertissements relatifs à Suppress manquantes des ruptures dans les états de commutation
  •   
  • enfin - les avertissements Suppress par rapport à bloquer enfin qui ne renvoient pas
  •   
  • cacher - supprimer les avertissements relatifs à la population locale que variable cacher
  •   
  • incomplète commutateur - Supprimer les avertissements relatifs aux entrées manquantes dans une instruction switch (ENUM cas)
  •   
  • nls - supprimer les avertissements par rapport à littéraux de chaîne non-nls
  •   
  • null - supprimer les avertissements par rapport à l'analyse de null
  •   
  • restriction - les avertissements relatifs à l'utilisation Suppress des références ou interdites découragez
  •   
  • série - supprimer les avertissements par rapport à manquante dans le champ serialVersionUID pour une classe sérialisable
  •   
  • -accès statique - supprimer les avertissements par rapport à l'accès statique incorrect
  •   
  • accès synthétique - supprimer les avertissements par rapport à l'accès non optimisée de classes internes
  •   
  • sans contrôle - supprimer les avertissements par rapport aux opérations non vérifiées
  •   
  • champ d'accès sans réserve - supprimer les avertissements par rapport à l'accès sur le terrain non qualifié
  •   
  • utilisé - supprimer les avertissements par rapport au code inutilisé
  •   
     

IntelliJ

     

NetBeans

     

Exemples

     

Un exemple de spécification d'un seul avertissement:

@SuppressWarnings("unchecked")
public void methodWithScaryWarnings() {
    List rawList = new ArrayList();
    List<String> stringList = (List<String>)rawList;
}
     

Un exemple d'utilisation de deux avertissements:

@SuppressWarnings({"unchecked","deprecation"})
public void methodWithScaryWarnings() {
    callDeprecatedMethod();
}

Autres conseils

Notez que doesnt Eclipse 3.5 comprendre rawtypes et drapeaux d'avertissement à passer à décochée. Il est frustrant que Eclipse est venu avec annotation rawtypes qui provoque plus de problèmes que la résolution. Ils auraient dû juste coincé avec le standard.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top