Java Generics: SuppressWarnings, что нужно и чего не стоит - PullRequest
1 голос
/ 04 октября 2011

Я понимаю, что аннотацию @SuppressWarnings("unchecked") можно использовать для подавления предупреждений компилятора, когда генерики не используются точно так, как они должны быть.И я понимаю, что с точки зрения пуристов, почти никогда не следует использовать эти аннотации и следует просто рефакторинг кода, чтобы не было предупреждений.

Но это заставило меня задуматься.

Есть ликакие-нибудь эмпирические правила, предписывающие, когда безопасно использовать эти аннотации (в отличие от «небезопасного» использования, которое приведет к отладке ада)?Если да, то каковы они и в каких ситуациях они возникают?

Заранее спасибо!

Ответы [ 5 ]

1 голос
/ 04 октября 2011

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

Я уделяю как можно больше внимания этим вопросам, но при использовании сторонних библиотек иногда это простоВы должны аннотировать, чтобы игнорировать.Пример: метод Hibernates list() не проверен, поэтому Eclipse будет жаловаться.Я знаю, какие предметы я возвращаю, поэтому могу игнорировать это.

1 голос
/ 04 октября 2011

Есть две основные области, в которых я часто использую эту аннотацию (и я бы сказал, правильно):

  • работа со сторонним кодом, который не генерируется
  • имеет дело с некоторым внешним представлением (например, сериализация)
1 голос
/ 04 октября 2011

Как упоминалось выше, единственная реальная причина их добавления - это когда вы используете библиотеки из более старых версий Java или просто не используете Generics. В этом случае я обычно решаю добавить аннотации, но я понимаю аргументы тех, кто этого не делает.

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

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

В любое время вы можете решить проблему без SupressWarnings ... сделайте это! : D

0 голосов
/ 04 октября 2011
0 голосов
/ 04 октября 2011

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

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

...