Item 72: Priorize o uso das exceções padrões
Java Efetivo (livro)
Posted on November 21, 2024
1. Importância da reutilização de exceções padrão
- Exceções padrão tornam o código mais fácil de entender e familiar para outros programadores.
- Melhoram a leitura e o aprendizado da API.
- Reduzem o consumo de memória e o tempo de carregamento de classes.
2. Exceções padrão mais reutilizadas e seus usos típicos
- IllegalArgumentException:
- Usada quando um parâmetro possui um valor inadequado.
Exemplo:
public void setRepeatCount(int count) {
if (count < 0) {
throw new IllegalArgumentException("Count cannot be negative");
}
this.count = count;
}
IllegalStateException:
- Lançada quando o estado do objeto não permite a operação.
Exemplo:
public void start() {
if (started) {
throw new IllegalStateException("Already started");
}
started = true;
}
NullPointerException:
- Usada quando um parâmetro nulo é proibido.
Exemplo:
public void setName(String name) {
if (name == null) {
throw new NullPointerException("Name cannot be null");
}
this.name = name;
}
IndexOutOfBoundsException:
Usada para índices fora do intervalo permitido.
Exemplo:
public int getElement(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException("Index out of range");
}
return elements[index];
}
ConcurrentModificationException:
- Lançada ao detectar uma modificação concorrente em objetos projetados para uso por uma única thread.
Exemplo:
for (String item : list) {
list.remove(item); // Pode lançar ConcurrentModificationException
}
UnsupportedOperationException:
- Lançada quando uma operação não é suportada pelo objeto.
Exemplo:
List<String> immutableList = Collections.unmodifiableList(new ArrayList<>());
immutableList.add("item"); // Lança UnsupportedOperationException
3. Boas práticas ao usar exceções padrão
- Não reutilize superclasses gerais como Exception, RuntimeException, Throwable ou Error diretamente.
- Escolha a exceção com base em suas semânticas documentadas.
- Use subclasses personalizadas de exceções padrão apenas quando necessário.
4. Decisão entre exceções
- Em situações ambíguas, siga estas diretrizes:
- Use IllegalStateException se a operação falhou devido ao estado do objeto.
- Use IllegalArgumentException se a falha foi causada por um argumento inválido.
Exemplo:
- Um método para distribuir cartas pode lançar IllegalArgumentException se o tamanho da mão for inválido ou IllegalStateException se o baralho não tiver cartas suficientes.
5. Outras exceções reutilizáveis
- ArithmeticException e NumberFormatException podem ser usadas em contextos de operações matemáticas e conversões de números.
Exemplo:
public int divide(int numerator, int denominator) {
if (denominator == 0) {
throw new ArithmeticException("Division by zero");
}
return numerator / denominator;
}
Conclusão
Priorize o uso de exceções padrão sempre que possível. Elas tornam o código mais claro, eficiente e consistente com as práticas da linguagem Java.
💖 💪 🙅 🚩
Java Efetivo (livro)
Posted on November 21, 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