Capítulo: Design de Métodos
- Foco: Usabilidade, robustez e flexibilidade no design de métodos.
- Cobertura: Tratamento de parâmetros e valores de retorno, design de assinaturas de métodos e documentação.
Item 49: Verifique a Validade dos Parâmetros
– Restrições em Parâmetros:
- Métodos e construtores geralmente possuem restrições sobre os valores dos parâmetros (ex.: índices não negativos, referências não nulas).
- Essas restrições devem ser documentadas e verificadas no início do método.
– Importância da Verificação:
- Detectar erros o mais cedo possível para evitar falhas inesperadas ou comportamento incorreto no método.
- Métodos que não verificam seus parâmetros podem causar falhas difíceis de depurar.
– Documentação das Exceções:
- Use a tag Javadoc @throws para documentar exceções lançadas em caso de violação de restrições.
- Exceções comuns: IllegalArgumentException, IndexOutOfBoundsException, NullPointerException.
Exemplo de Verificação de Parâmetro:
public static int mod(int x, int y) {
if (y <= 0) {
throw new IllegalArgumentException("Divisor deve ser positivo.");
}
return x % y;
}
– Uso de Objects.requireNonNull:
- Introduzido no Java 7, é usado para verificar nulidade de objetos.
- Retorna o valor passado após a verificação:
this.m = Objects.requireNonNull(m, "Parâmetro 'm' não pode ser nulo");
– Verificação de Ranges (Java 9):
Métodos checkFromIndexSize, checkFromToIndex, e checkIndex para verificar índices em listas e arrays.
Menos flexíveis, usados principalmente para coleções.
– Verificação de Parâmetros em Métodos Não Públicos:
Para métodos não exportados, use assertions para verificar parâmetros:
assert x > 0 : "Valor de x deve ser positivo";
– Casos Especiais:
- Construtores devem sempre verificar a validade dos parâmetros armazenados para uso posterior.
- Exceções podem ser feitas para verificações custosas, onde a verificação é implícita durante o cálculo.
– Exemplo de Verificação Implícita:
- Collections.sort(List) assume que os objetos são mutuamente comparáveis. A verificação ocorre durante o processo de ordenação.
– Tradução de Exceções:
- Quando a verificação implícita lança a exceção errada, use a “tradução de exceção” para lançar a exceção correta.
– Flexibilidade nas Restrições:
- Métodos devem ser projetados para ser o mais gerais possível, impondo o mínimo de restrições necessárias.
– Conclusão:
- Documente e implemente verificações de validade de parâmetros em métodos e construtores. A prática é fundamental para evitar erros futuros e facilitar a depuração.
Exemplos do livro:
Source link
lol