java - singapur - Advertencia de código muerto?
terremoto en singapur hoy (4)
En su caso, la siguiente declaración está causando el problema ya que se ejecuta incondicionalmente y siempre se ejecutará cuando se ejecute el bucle for. Por lo que nunca alcanzará para i ++ por lo que su código muerto.
return "";
¿Por qué recibo una advertencia de código muerto en el i ++ en esta función?
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;
}
};
}
Esto se debe a que i++
normalmente se ejecuta después del final del bloque for, y en su función nunca se alcanzará el final del bloque porque en el bloque retorna incondicionalmente un valor.
Un for-loop
for (A; B; C) {
D;
}
Se traduce internamente en lo siguiente:
A;
while (B) {
D;
C;
}
Puede ver que si D
siempre regresa de la función, nunca se alcanzará C
De eso se trata la queja.
No hay posibilidad de que el for
bucle más de una vez porque estás regresando:
return "";
Por lo tanto, i++
no se ejecutará nunca y es por eso que recibe una advertencia de código muerto . Tal vez quieras eliminar esa return "";
y / o ponerlo fuera del for
.
Solo ejecutará el bucle una vez debido al return "";
declaración.