Java: eliminação de código morto
Gostaria de saber como o Java lidaria com o seguinte cenário:
Suponha que eu tenha uma classe chamada Debug, que se parece com isso:
public class Debug
{
private static final boolean isAssertEnabled = true;
public static void assertTrue(boolean b, String errorMessage) {
if (isAssertEnabled) {
if (!b) {
throw new RuntimeException(errorMessage);
}
}
}
}
e suponha que meu código tenha uma chamada parecida com esta:
...
Debug.assertTrue((x + y != z) && (v - u > w), "Some error message");
....
Eu tenho algumas perguntas:
Se oisAssertEnabled sinalizador está definido comofalso, toda a chamada para Debug.assertTrue será compilada? Observe que a verificação se isAssertEnabled == true é feita apenas dentro da função após ser chamada.Se toda a chamada for compilada, isso também significa que a avaliação da expressão booleana é compilada? Seria um desperdício avaliar essa expressão por nada.Obrigado pela ajuda!