Предупреждение о мертвом коде?

Почему я получаю предупреждение об ошибке в i ++ в этой функции?

InputFilter hexInputFilter() { return new InputFilter() { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { for (int i = start; i < end; i++) { if ((source.charAt(i) >= '0') && (source.charAt(i) <= '9')) { return null; } if ((Character.toUpperCase(source.charAt(i)) >= 'A') && (Character.toUpperCase(source.charAt(i)) <= 'F')) { return null; } return ""; } return null; } }; } 

Solutions Collecting From Web of "Предупреждение о мертвом коде?"

У вас нет шансов на то, что for for больше, чем один раз, потому что вы возвращаетесь:

 return ""; 

Таким образом, i++ не будет выполняться никогда, и поэтому вы получаете предупреждение о мертвом коде . Возможно, вы хотите удалить этот return ""; И / или поставить его за пределы.

Это связано с тем, что i++ обычно выполняется после окончания блокировки, а в вашей функции конец блока блокировки никогда не будет достигнут, потому что в блоке вы безоговорочно возвращаете значение.

А для цикла

 for (A; B; C) { D; } 

Внутренне переведено на следующее:

 A; while (B) { D; C; } 

Вы можете видеть, что если D всегда возвращается из функции, C никогда не будет достигнута. Вот о чем идет речь.

Вы только однажды выполните цикл один раз из-за return ""; заявление.

В вашем случае приведенный ниже оператор вызывает проблему, поскольку она выполняется безоговорочно и всегда будет выполняться при выполнении цикла for. Таким образом, он никогда не достигнет i ++, поэтому его мертвый код.

 return "";