Предупреждение о мертвом коде?
Почему я получаю предупреждение об ошибке в я ++ в этой функции?
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;
}
};
}
Ответы
Ответ 1
Нет никаких шансов для цикла for
для цикла больше, чем один раз, потому что вы возвращаетесь:
return "";
Таким образом, i++
не будет выполняться никогда и почему вы получаете предупреждение о мертвом коде. Возможно, вы хотите удалить этот return "";
и/или поместить его вне for
.
Ответ 2
Это потому, что i++
обычно выполняется после окончания блока for, а в вашей функции конец блока блокировки никогда не будет достигнут, потому что в блоке вы безоговорочно возвращаете значение.
A для цикла
for (A; B; C) {
D;
}
внутренне переведено на следующее:
A;
while (B) {
D;
C;
}
Вы можете видеть, что если D
всегда возвращается из функции, C
никогда не будет достигнуто. Вот о чем идет речь.
Ответ 3
Вы будете выполнять цикл только один раз из-за инструкции return "";
.
Ответ 4
В вашем случае приведенный ниже оператор вызывает проблему, поскольку она выполняется безоговорочно и всегда будет выполняться при выполнении цикла for. Поэтому он никогда не достигнет я ++, поэтому его мертвый код.
return "";