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.
Top comments (1)
Gostei bastante do item abordado e concordo em partes, mas na contramão, algumas ferramentas de SAST como sonarqube por exemplo, reclamam se você usar exceções nativas.