web-dev-qa-db-fra.com

Inutile @SuppressWarnings ("inutilisé")

Je reçois un avertissement du compilateur pour l'annotation @SuppressWarnings Dans Eclipse pour le code:

@Override
public boolean doSomething(@SuppressWarnings("unused") String whatever) throws AnException {
    throw new AnException("I'm still in bed and can't do anything until I've had a shower!");
}

Il ressemble à un gribouillage jaune sous le mot "inutilisé" et, au survol de la souris, l’info-bulle Unnecessary @SuppressWarnings("unused").

Je pense qu'un autre développeur est invité à insérer ces annotations par Eclipse et il m'incite essentiellement à les supprimer. Comment puis-je configurer Eclipse pour qu'il me demande de mettre l'annotation @SuppressWarnings Au lieu de s'en plaindre?

Si quelqu'un souhaite commenter les meilleures pratiques dans ce domaine, il serait le bienvenu.

53
Edd

Dans le code de votre question, l'annotation @SuppressWarnings("unused") n'est pas nécessaire, car la méthode redéfinit une autre méthode à partir d'une superclasse ou implémente une interface. Même si vous n'utilisez pas réellement le paramètre whatever, il est obligatoire de le déclarer, sinon l'annotation @Override Produira une erreur (vous modifieriez la signature de la méthode remplacée si vous supprimiez le paramètre.)

Dans certaines versions plus anciennes d'Eclipse, le code tel qu'il est présenté ne provoquait pas d'avertissement, mais dans les versions plus récentes, il en est ainsi. Je crois que c'est un avertissement valide, et je préférerais supprimer le @SuppressWarnings("unused") dans ce cas.

53
Óscar López

Aller à

Fenêtre Préférences Java Compilateur Erreurs/Avertissements Annotations .

Et sélectionnez Ignore pour jeton '@ SuppressWarnings` inutilisé .

23
aioobe

Dans mon code, il n'y a pas d'héritage définissant les 3 méthodes avec @SuppressWarnings ("inutilisé")

Ce code donne "Unnecessary @SuppressWarnings (" inutilisé ")" dans Eclipse Juno (dernière version), mais si je supprime le @SuppressWarnings ("inutilisé"), j'obtiens des avertissements "Le constructeur/la méthode n'est jamais utilisé" dans IntelliJ IDEA 11.1.3

Les méthodes ne sont pas directement utilisées dans le projet, seulement par les produits tiers Jackson, JAXB & GSON, alors IntelliJ a raison, je dirais ...

public class EmailUnsendable extends SkjemaError {

    private NestedCommand command;        // Can't be Command (interface) because of GSON!

    @SuppressWarnings("unused")            // Used by Jackson/JAXB/GSON
    public EmailUnsendable() {
    }

    public EmailUnsendable(String referenceNumber, String stackTrace, NestedCommand command) {
        super(referenceNumber, stackTrace);
        this.command = command;
    }

    @SuppressWarnings("unused")            // Used by Jackson/JAXB/GSON
    public NestedCommand getCommand() {
        return command;
    }

    @SuppressWarnings("unused")            // Used by Jackson/JAXB/GSON
    public void setCommand(NestedCommand command) {
        this.command = command;
    }
}

Je crois que c'est une erreur dans Eclipse.

5
Torben Vesterager

Sinon, si vous pensez qu'il est plus correct de supprimer l'annotation SuppressWarnings:

Fenêtre -> Préférences -> Java -> Compilateur -> Erreurs/Avertissements -> Code inutile -> La valeur du paramètre n'est pas utilisée

et sélectionnez Ignore dans les méthodes de substitution et d’implémentation

5
David Carboni