41 votes

Java 6: avertissement @SuppressWarnings ("rawtypes") non pris en charge

J'ai déménagé dans une nouvelle machine qui possède la dernière version de Sun Java compilateur et remarqué plusieurs avertissements existants dans la version 6 de Java code. L'IDE Eclipse, a suggéré que je annoter la cession:

@SuppressWarnings("rawtypes")

Par exemple:

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

Quand j'ai déménagé retour à la machine avec l'ancien compilateur (JDK 1.6.0_20), j'ai remarqué que cette ancienne compilateur met en garde contre la suppression de "rawtypes" mises en garde, affirmant que cette suppression n'est pas pris en charge et propose de le remplacer par @SuppressWarnings("unchecked"). Aussi, il y avait certains endroits où les nouvelles compilateur, par défaut, m'a fait mettre les deux "unchecked" et "rawtypes" - la compilation de ce code avec l'ancien compilateur reproduit le même avertissement.

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

43voto

Colin Hebert Points 40084

Vous pouvez utiliser l' @SuppressWarnings("unchecked") qui est pris en charge par l'éclipse et d'un compilateur javac.

Mais n'oubliez pas l' @SuppressWarnings d'annotation est utilisée par le compilateur, qui peut avoir ses propres valeurs. Le JLS ne force le compilateur à comprendre les valeurs "unchecked" et "obsolète" (pour l'instant).

Éditeurs de compilateurs doivent documenter l'avertissement noms qu'ils soutiennent en conjonction avec ce type d'annotation. Ils sont encouragés à coopérer afin de s'assurer que les mêmes noms de travailler sur plusieurs compilateurs.

Si vous utilisez Helios, vous aurez besoin de mettre une option spécifique pour permettre l' @SuppressWarnings("unchecked") au lieu de @SuppressWarnings("rawtypes"),

Dans le cas où il n'est pas possible de mettre à jour le code avec le nouveau jeton, l' suppressRawWhenUnchecked=true système de propriété peut être définie lors du démarrage d'Eclipse.


Ressources :


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

@SuppressWarnings Annotations en Java

Annotation Standard pour la suppression de diverses mises en garde

Le SuppressWarnings annotation a été ajouté comme une annotation standard en Java SE 5.

Définition

Le @SuppressWarnings annotation est définie dans le Langage Java Specification section 9.6.1.5. Cet article stipule:

Le type d'annotation SuppressWarnings prend en charge programmeur de contrôle sur les mises en garde contraire émis par le compilateur Java. Il contient un seul élément qui est un tableau d' String. Si un programme de déclaration est annoté avec l'annotation @SuppressWarnings(value = {S1, ... , Sk}), puis d'un compilateur Java ne doit pas rapporter aucun avertissement identifié par l'un des S1, ... , Sk, si cet avertissement aurait été créé suite à annotées de la déclaration ou de l'une de ses parties.

Décoché les avertissements sont identifiés par la chaîne de caractères "unchecked".

Le subséquente de l'article sur @Deprecation mentionne également que ces avertissements peut être supprimé avec @SuppressWarnings("deprecation").

Valide Les Types D'Avertissement

Les deux seuls avertissement chaînes qui sont mentionnés dans le cahier des charges lui-même sont "unchecked" et de "dépréciation". Cependant, le JDK Sun utilise un plus grand ensemble de chaînes dans le compilateur. Vous pouvez déterminer l'ensemble actuel en exécutant:

javac -X

qui va vous montrer (entre autres choses) les paramètres valides pour -Xlint.

Par exemple, Sun JDK 1.5 montre:

  • tous - de supprimer tous les avertissements de ce code
  • dépréciation - supprimer les avertissements de l'utilisation de code obsolète
  • décoché - supprimer les avertissements de décoché un appel ou un décoché cast
  • fallthrough - supprimer les avertissements si un commutateur tombe à travers, sans trouver un cas valide (et non par défaut)
  • le chemin d'accès
  • série - supprimer les avertissements si une classe Sérialisable ne définit pas un serialVersionUID
  • enfin - supprimer les avertissements de retour dans une enfin (qui ignore retour avec le coup d'essayer)

Et Sun JDK 1.6 ajoute:

  • cast
  • divzero - supprimer les avertissements si integer division par zéro est détecté
  • vide
  • remplace
  • aucun

IDEs et les outils d'analyse statique prennent généralement en charge d'un grand nombre de valeurs possibles pour @SuppressWarnings. Ces valeurs correspondent à des analyses statiques contrôles effectués par les IDE.

Eclipse

L'Éclipse avertissement valeurs pour Eclipse 3.3 sont documentées dans le JDT docs.

  • tous - de supprimer tous les avertissements
  • boxe - supprimer les avertissements relatifs à boxing/unboxing opérations
  • la fonte de supprimer les avertissements relatifs à des opérations de transtypage
  • dep-ann - supprimer les avertissements relatifs à déconseillé d'annotation
  • dépréciation - supprimer les avertissements relatifs à la dépréciation
  • fallthrough - supprimer les avertissements relatifs manque de pauses dans les instructions switch
  • enfin - supprimer les avertissements relatifs à bloc final de ne pas revenir
  • cacher - supprimer les avertissements relatifs à la population locale, qui cachent une variable
  • incomplet-commutateur - de supprimer les mises en garde par rapport à des entrées manquantes dans une instruction switch (enum cas)
  • nls - supprimer les avertissements relatifs à la non-nls littéraux de chaîne
  • null - supprimer les avertissements relatifs à la valeur null analyse
  • restriction - de supprimer les mises en garde relatives à l'utilisation de déconseillée ou interdite références
  • série - supprimer les avertissements relatifs à manquantes champ serialVersionUID pour une classe sérialisable
  • statique-accès - supprimer les avertissements relatifs à une mauvaise statique d'accès
  • synthétique-accès - supprimer les avertissements relatifs à unoptimized accès depuis le centre-classes
  • décoché - supprimer les avertissements relatifs aux opérations décoché
  • sans réserve-domaine-accès - supprimer les avertissements relatifs à l'accès à un champ non qualifiés
  • inutilisé - supprimer les avertissements relatifs à 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 mises en garde:

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

4voto

inder Points 565

Notez que Eclipse 3.5 ne comprend pas les types bruts et signale un avertissement pour passer en mode non vérifié. Il est frustrant qu’Eclipse ait proposé une annotation rawtypes qui pose plus de problèmes que de résolution. Ils auraient juste dû rester avec le standard.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X