Как подавить предупреждения компилятора Java для определенных функций - PullRequest
24 голосов
/ 27 февраля 2009

Нас всегда учат, чтобы мы использовали break в выражениях switch, чтобы избежать провала.

Компилятор Java предупреждает об этих ситуациях, чтобы помочь нам не делать тривиальные (но радикальные) ошибки.

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

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

Есть идеи?

Ответы [ 5 ]

37 голосов
/ 27 февраля 2009

Если вы действительно, действительно должны это сделать, и вы уверены, что не ошиблись, ознакомьтесь с аннотацией @ SuppressWarnings . Я полагаю, в вашем случае вам нужно

@SuppressWarnings("fallthrough")
4 голосов
/ 27 февраля 2009

Чтобы завершить другой ответ о SuppressWarnings:

@SuppressWarnings("fallthrough")

Попытка подавить все сквозные предупреждения на уровне компилятора - плохая вещь: как вы объяснили, случаи, когда вам нужно пройти через предупреждение, четко определены. Таким образом, это должно быть явно написано в коде (приветствуется аннотация @SuppressWarnings("fallthrough") с дополнительным комментарием). При этом у вас все равно будет предупреждение о сбое, если вы действительно забудете где-нибудь перерыв в своем коде.

4 голосов
/ 27 февраля 2009

Является ли аннотация @SuppressWarnings ( javadoc ) тем, что вы ищете?

Например:

@SuppressWarnings("unchecked")
public void someMethod(...) {
    ...
}
1 голос
/ 05 августа 2011

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

0 голосов
/ 13 мая 2016
@SuppressWarnings("fallthrough")

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

@SuppressWarnings("fallthrough")
public void fallthroughTest(int i)
{
    switch (i)
    {
        case 1:
            // Execute both 1 and 2
        case 2:
            // Execute only 1
    }
}
...