Item 75: Inclua as informações a respeito das capturas de falhas nos detalhes da mensagem
Java Efetivo (livro)
Posted on November 28, 2024
Recomendações principais
Detalhe a falha nas mensagens de exceção:
- Inclua valores de parâmetros e campos que contribuíram para a falha.
- Use mensagens concisas e informativas para ajudar na análise.
- Exemplo: Para uma IndexOutOfBoundsException, inclua:
throw new IndexOutOfBoundsException("Index: " + index + ", Lower bound: " + lowerBound + ", Upper bound: " + upperBound);
Evite incluir dados sensíveis:
- Nunca exponha senhas, chaves de criptografia ou informações sensíveis em mensagens detalhadas, pois rastreamentos de pilha podem ser visualizados por várias pessoas.
Priorize conteúdo sobre legibilidade:
- A mensagem detalhada deve ser voltada para desenvolvedores e engenheiros, auxiliando na análise de falhas.
- Mensagens para usuários finais devem ser separadas e amigáveis, com localização se necessário.
Benefícios de Construtores específicos
- Construtores específicos para exceções ajudam a capturar informações relevantes e gerar mensagens automaticamente.
- Reduzem erros e garantem consistência na captura de falhas.
- Exemplo de construtor ideal:
public class IndexOutOfBoundsException extends RuntimeException {
private final int lowerBound;
private final int upperBound;
private final int index;
public IndexOutOfBoundsException(int lowerBound, int upperBound, int index) {
super("Index: " + index + ", Lower bound: " + lowerBound + ", Upper bound: " + upperBound);
this.lowerBound = lowerBound;
this.upperBound = upperBound;
this.index = index;
}
public int getLowerBound() {
return lowerBound;
}
public int getUpperBound() {
return upperBound;
}
public int getIndex() {
return index;
}
}
Inclua métodos de acesso aos detalhes da falha
- Para exceções verificadas, os métodos de acesso (getters) podem facilitar a recuperação e análise.
- Mesmo para exceções não verificadas, é recomendável fornecer getters quando apropriado.
Práticas recomendadas
- Centralize a lógica da mensagem na classe de exceção:
- Evite replicar a lógica de geração da mensagem detalhada em múltiplos pontos do código.
- Exemplo com geração centralizada de mensagem:
public class DivisionByZeroException extends ArithmeticException {
private final int numerator;
public DivisionByZeroException(int numerator) {
super("Attempted to divide " + numerator + " by zero.");
this.numerator = numerator;
}
public int getNumerator() {
return numerator;
}
}
Casos reais
Exemplo com IndexOutOfBoundsException (Java 9+):
public IndexOutOfBoundsException(int index) extends RuntimeException {
super("Index out of range: " + index);
}
Exemplo de uma classe personalizada:
public class InvalidConfigurationException extends RuntimeException {
private final String configKey;
public InvalidConfigurationException(String configKey) {
super("Invalid configuration for key: " + configKey);
this.configKey = configKey;
}
public String getConfigKey() {
return configKey;
}
}
Conclusão
- Sempre inclua informações relevantes de falhas nas mensagens de exceções, evitando dados sensíveis.
- Utilize construtores específicos e métodos de acesso para capturar e documentar informações críticas.
- Essas práticas aumentam a confiabilidade e facilitam a depuração e manutenção do código.
💖 💪 🙅 🚩
Java Efetivo (livro)
Posted on November 28, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
career Burnout, Imposter Syndrome & More: What Junior Devs Really Experience 🕵️♀️
November 28, 2024
webdev Mastering the Dependency Inversion Principle: Best Practices for Clean Code with DI
November 28, 2024