Ненужный @SuppressWarnings («не используется») - PullRequest
51 голосов
/ 02 марта 2012

Я получаю предупреждение компилятора для аннотации @SuppressWarnings в eclipse для кода:

@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!");
}

Это выглядит как желтый волнистый промежуток под словом "не используется" и при наведении курсора мыши я получаювсплывающая подсказка Unnecessary @SuppressWarnings("unused").

Я думаю, что другой разработчик предлагает вставить эти аннотации по Eclipse, и мне в основном предлагают убрать их.Как я могу настроить eclipse, чтобы он предлагал мне добавить аннотацию @SuppressWarnings вместо того, чтобы жаловаться на нее?

Если кто-то захочет прокомментировать наилучшую практику, то это также будет приветствоваться.

Ответы [ 4 ]

52 голосов
/ 02 марта 2012

В коде вашего вопроса аннотация @SuppressWarnings("unused") не нужна, поскольку метод либо переопределяет другой метод из суперкласса, либо реализует интерфейс.Даже если вы на самом деле не используете параметр whatever, его обязательно нужно объявить, в противном случае аннотация @Override приведет к ошибке (вы бы изменили сигнатуру переопределенного метода, если вы удалили параметр.)*

В некоторых более старых версиях Eclipse код, показанный на рисунке, не вызывает предупреждения, но в более поздних выпусках это вызывает.Я считаю, что это действительное предупреждение, и я бы лучше удалил @SuppressWarnings("unused") в этом случае.

23 голосов
/ 02 марта 2012

Перейти к

Окно Предпочтения Java Компилятор Ошибки / предупреждения Аннотации .

И выберите Игнорировать для Неиспользованный токен @ SuppressWarnings` .

5 голосов
/ 04 сентября 2012

В моем коде нет наследования, определяющего 3 метода с помощью @SuppressWarnings ("unused")

Этот код выдает «Ненужные @SuppressWarnings (« unused »)» в Eclipse Juno (последняя версия), но если я удаляю @SuppressWarnings («unused»), я получаю предупреждения «Конструктор / Метод никогда не используется» в IntelliJ ИДЕЯ 11.1.3

Методы напрямую не используются в проекте, только сторонними продуктами Jackson, JAXB & GSON, поэтому IntelliJ прав, я бы сказал ...

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;
    }
}

Я полагаю, что это ошибка в Eclipse.

5 голосов
/ 05 марта 2012

В качестве альтернативы, если вы считаете более правильным удалить аннотацию SuppressWarnings:

Окно -> Настройки -> Java -> Компилятор -> Ошибки / предупреждения -> Ненужный код -> Значение параметра не используется

и выберите Игнорировать при переопределении и реализации методов

...