Что такое SuppressWarnings (& ldquo; unchecked & rdquo;) в Java?

Использование fscanf для чтения / tokenise файла всегда приводит к хрупкому коду или болью и страданиям. Чтение строки, а также токенизация или сканирование этой линии безопасны и эффективны. Ему нужно больше строк кода, а это значит, что требуется больше времени, чтобы ДУМАТЬ о том, что вы хотите сделать (и вам нужно обрабатывать размер конечного входного буфера), но после этого жизнь просто воняет меньше.

t бой fscanf. Просто не используйте его. Когда-либо.

412
задан Tom Hawtin - tackline 15 July 2009 в 10:40
поделиться

5 ответов

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

Я обычно нахожу это проблемой, когда высмеиваю общий интерфейс, но есть и другие примеры тоже. Обычно стоит попытаться найти способ избежать предупреждения, а не подавить его (здесь помогает часто задаваемые вопросы по Java Generics ), но иногда, даже если это возможно, код искажается. формы настолько сильно, что подавление предупреждения становится более аккуратным. В этом случае всегда добавляйте пояснительный комментарий!

В том же FAQ по универсальным шаблонам есть несколько разделов по этой теме, начиная с «Что такое« непроверенное »предупреждение?» - его стоит прочитать.

] действительно ли выполнение будет законным во время выполнения.

Я обычно нахожу это неприятным, когда высмеиваю общий интерфейс, но есть и другие примеры. Обычно стоит попытаться найти способ избежать предупреждения, а не подавить его (здесь помогает FAQ по Java Generics ), но иногда, даже если это возможно, код искажается. формы настолько сильно, что подавление предупреждения становится более аккуратным. В этом случае всегда добавляйте пояснительный комментарий!

В том же FAQ по универсальным шаблонам есть несколько разделов по этой теме, начиная с «Что такое« непроверенное »предупреждение?» - его стоит прочитать.

действительно ли выполнение будет законным во время выполнения.

Я обычно нахожу это неприятным, когда высмеиваю общий интерфейс, но есть и другие примеры. Обычно стоит попытаться найти способ избежать предупреждения, а не подавить его (здесь помогает FAQ по Java Generics ), но иногда, даже если это возможно, код искажается. формы настолько сильно, что подавление предупреждения становится более аккуратным. В этом случае всегда добавляйте пояснительный комментарий!

В том же FAQ по универсальным шаблонам есть несколько разделов по этой теме, начиная с «Что такое« непроверенное »предупреждение?» - его стоит прочитать.

Обычно стоит попытаться найти способ избежать предупреждения, а не подавить его (здесь помогает FAQ по Java Generics ), но иногда, даже если это возможно, код искажается формы настолько сильно, что подавление предупреждения становится более аккуратным. В этом случае всегда добавляйте пояснительный комментарий!

В том же FAQ по универсальным шаблонам есть несколько разделов по этой теме, начиная с «Что такое« непроверенное »предупреждение?» - его стоит прочитать.

Как правило, стоит попытаться найти способ избежать предупреждения, а не подавить его (здесь помогает FAQ по Java Generics ), но иногда, даже если это возможно, код искажается формы настолько сильно, что подавление предупреждения становится более аккуратным. В этом случае всегда добавляйте пояснительный комментарий!

В том же FAQ по универсальным шаблонам есть несколько разделов по этой теме, начиная с «Что такое« непроверенное »предупреждение?» - его стоит прочитать.

]
398
ответ дан 22 November 2019 в 23:24
поделиться

It could also mean that the current Java type system version isn't good enough for your case. There were several JSR propositions / hacks to fix this: Type tokens, Super Type Tokens, Class.cast().

If you really need this supression, narrow it down as much as possible (e.g. don't put it onto the class itself or onto a long method). An example:

public List<String> getALegacyListReversed() {
   @SuppressWarnings("unchecked") List<String> list =
       (List<String>)legacyLibrary.getStringList();

   Collections.reverse(list);
   return list;
}
19
ответ дан 22 November 2019 в 23:24
поделиться

Насколько мне известно, на данный момент это связано с подавлением предупреждений о дженериках; дженерики - это новая программная конструкция, не поддерживаемая в версиях JDK до JDK 5, поэтому любое смешение старых конструкций с новыми может привести к неожиданным результатам.

Компилятор предупреждает программиста об этом, но если программист уже знает, он может отключить эти ужасные предупреждения с помощью SuppressWarnings.

3
ответ дан 22 November 2019 в 23:24
поделиться

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

Вы можете прочитать больше об этой конкретной аннотации здесь:

SuppressWarnings

Кроме того, Oracle предоставляет некоторую учебную документацию по использованию аннотаций здесь:

Аннотации

По их словам,

«Предупреждение« непроверено »может появиться при взаимодействии с устаревшим кодом, написанным до появления дженериков (обсуждается в урок под названием Generics). "

49
ответ дан 22 November 2019 в 23:24
поделиться

Аннотация SuppressWarning используется для подавления предупреждений компилятора для аннотированного элемента. В частности, категория unchecked позволяет подавлять предупреждения компилятора, генерируемые в результате непроверенных преобразований типов.

9
ответ дан 22 November 2019 в 23:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: