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) {
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.
Top comments (0)