22

Мы всегда учим, чтобы мы использовали перерыв в операторах switch, чтобы избежать провалов.Как подавить предупреждения компилятора Java для определенных функций

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

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

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

Любые идеи?

+0

Пройдя, вы имеете в виду провалиться в заявлениях о переключателях? – Elijah

+0

Как говорит Рон о перерывах в заявлениях о делах, да. – Nicolas

+0

Да, извините, я полагаю, что состояние переключения более точное, чем случай (отредактировано выше) –

ответ

36

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

@SuppressWarnings("fallthrough") 
+0

, если вы нашли этот ответ в поисках списка действительных SupressWarnings, попробуйте следующее: http://stackoverflow.com/questions/1205995/what-is-the -list-of-valid-suppresswarnings-warning-names-in-java – Nick

4

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

Например:

@SuppressWarnings("unchecked") 
public void someMethod(...) { 
    ... 
} 
+1

Я думаю, что это должно быть @SuppressWarnings ("fallthrough") вместо "unchecked" (http://www.java-tips.org/java-se -tips/java.lang/introduction-annotations.html) –

+1

Компилятор Eclipse также предлагает токен '' '// $ FALL-THROUGH $' '. К сожалению, он не очень хорошо взаимодействует с аннотацией метода (было бы неплохо разрешить аннотацию и токен и предупредить, что все пропуски, не прошедшие токен, даже при наличии аннотации) – eckes

4

Для завершения другого ответа о SuppressWarnings:

@SuppressWarnings("fallthrough") 

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

+0

С двойными кавычками ... –

+0

Упс, спасибо, я изменил его. – Nicolas

1

Вы можете создать структуру операторов 'if' вместо коммутатора. Не может быть столь же визуально приятным, однако ни предупреждение, ни подавление.

+1

Кроме того, каскад 'if', вероятно, менее эффективен, чем' switch'. –

0
@SuppressWarnings("fallthrough") 

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

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