Какая польза от @SuppressWarnings - PullRequest
5 голосов
/ 20 декабря 2011

Я не понял эту особенность Java. Я знаю, что это облегчает кодирование и иногда выглядит аккуратнее, но какова реальная польза от этого? Наоборот, я чувствую, что лучше отображать предупреждения, так как в будущем любой может отослать их, прежде чем вносить изменения в код. Увеличивает ли это @SuppressWarnings эффективность компиляции ИЛИ согласно каким-либо стандартам кодирования?

Ответы [ 6 ]

9 голосов
/ 20 декабря 2011

Во время программирования вы должны следить за предупреждениями компилятора и в лучшем случае компилировать ваш код без предупреждений (и, конечно, ошибок).

Но иногда вы не можете избавиться от предупреждения, и вы ЗНАЕТЕ, что код верен или не может быть изменен. Тогда вы не хотите, чтобы каждый раз, когда компилятор беспокоился о том, что что-то не так.

Так что вы можете подавить это с помощью команды, которую вы упомянули.

6 голосов
/ 20 декабря 2011

Другие ответы уже объясняли случаи использования @SuppressWarnings много, но я хочу подчеркнуть, что иногда вам абсолютно необходимо использовать @SuppressWarnings, чтобы преодолеть ограничения самого языка , и в этихслучаи использования @SuppressWarnings абсолютно законны.

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

Вот некоторые распространенные случаи, когда вы абсолютно не можете избавиться от предупреждений без @SuppressWarnings:

  • Реализация универсальной коллекции на основе массива (поскольку вы не можете создать универсальный массив)
  • A Map от классов к их реализациям (поскольку вы не можете назначать разные значения параметра универсального типа для разных объектов карты)
3 голосов
/ 20 декабря 2011

Когда вы имеете дело с унаследованным кодом, который не поддерживает дженерики (Java <= 1.4), это единственный жизнеспособный способ избавиться от предупреждений о приведении. </p>

1 голос
/ 20 декабря 2011

Существует несколько причин для использования @SuppressWarnings, но один из наиболее полезных случаев:

  • Наличие существующего проекта с тысячами предупреждений.Вы хотите, чтобы ваша команда позаботилась о предупреждениях сейчас, но у вас нет времени, чтобы исправить все предупреждения.

    Аннотация дает вам возможность подавить некоторые предупреждения, которые нельзя быстро исправить, и получить "чистую" базу.

    Эта чистая база необходима, поскольку никто не будет бояться проверять код с помощьюпредупреждений, когда их тысячи, но они будут бояться, когда кодовая база не содержит предупреждений, и все остальные в команде сразу увидят, когда кто-то проверяет код с двумя предупреждениями или около того.

  • Выиспользуют сторонние библиотеки, и поэтому вас раздражают предупреждения, которые вы не можете исправить, за исключением изменения кода lib, чего вы не хотите в большинстве случаев.

На мой взгляд, первая причина - одна из лучшихварианты использования для @SuppressWarnings.

1 голос
/ 20 декабря 2011

Использование SuppressWarnings должно использоваться во время компиляции (поэтому только компилятор знает, что делать, когда видит аннотацию SuppressWarnings).

JavaDoc сообщает:

Набор предупреждений, которые должны подавляться компилятором в аннотированный элемент. Дубликаты имен разрешены. Второй и последовательные вхождения имени игнорируются. Наличие нераспознанные имена предупреждений не являются ошибкой: компиляторы должны игнорировать любые имена предупреждений, которые они не распознают. Однако они могут свободно испускать предупреждение, если аннотация содержит нераспознанное имя предупреждения.

1 голос
/ 20 декабря 2011

Фактическое использование - подавление предупреждений.Вот и все.Ни меньше, ни больше.Я не думаю, что это влияет на эффективность компиляции, но определенно не на эффективность времени выполнения.

...