O que significa UnsupportedOperationException e como tratar esse erro?
O erro UnsupportedOperationException
ocorre quando tentamos executar uma operação que não é suportada por um determinado objeto ou método. Esse erro é comum em coleções imutáveis, implementações parciais de classes e APIs que restringem certas operações.
Causas comuns do erro UnsupportedOperationException
Tentar modificar uma lista criada com List.of()
.
Remover elementos de uma coleção não modificável.
Chamar um método que ainda não foi implementado em uma interface.
Utilizar classes que restringem operações para preservar a imutabilidade.
Exemplo de erro e solução
Código que gera o erro:
import java.util.List;
public class Exemplo {
public static void main(String[] args) {
List<String> lista = List.of("A", "B", "C");
lista.add("D"); // Lançará UnsupportedOperationException
}
}
Correção:
import java.util.ArrayList;
import java.util.List;
public class Exemplo {
public static void main(String[] args) {
List<String> lista = new ArrayList<>(List.of("A", "B", "C"));
lista.add("D"); // Modificação permitida
System.out.println(lista);
}
}
O erro ocorre porque List.of()
cria uma lista imutável. A solução correta é copiar os elementos para uma ArrayList
, que permite modificações.
Como evitar UnsupportedOperationException?
Verifique se a coleção ou objeto permite modificações antes de tentar alterá-lo.
Use new ArrayList<>(colecao)
para criar uma versão modificável da lista.
Se for um método não implementado, implemente-o ou forneça uma alternativa segura.
Utilize Collections.unmodifiableList()
somente quando a imutabilidade for intencional.
import java.util.Collections;
import java.util.List;
public class Exemplo {
public static void main(String[] args) {
List<String> lista = new ArrayList<>(List.of("A", "B", "C"));
List<String> listaImutavel = Collections.unmodifiableList(lista);
// listaImutavel.add("D"); // Isso lançaria UnsupportedOperationException
}
}
Conclusão
O erro UnsupportedOperationException
geralmente indica que estamos tentando modificar um objeto que foi intencionalmente projetado para ser imutável ou restrito. Para evitá-lo, é importante garantir que a coleção ou objeto permita operações de modificação antes de tentar alterá-los.
Por que UnsupportedOperationException ocorre ao modificar listas imutáveis?
O erro UnsupportedOperationException ocorre com frequência ao trabalhar com coleções imutáveis em Java. Ele ensina a importância de entender como cada estrutura de dados funciona antes de modificar seu conteúdo. Garantir que objetos possam ser alterados antes de tentar manipulá-los evita falhas inesperadas na execução do programa.
Algumas aplicações:
- Evitar falhas inesperadas ao manipular coleções
- Garantir a imutabilidade de listas e conjuntos
- Implementação segura de métodos em APIs e bibliotecas
- Melhoria no controle de permissões em estruturas de dados
Dicas para quem está começando
- Verifique se a coleção pode ser modificada antes de tentar alterar seu conteúdo
- Use ArrayList para criar listas mutáveis
- Evite usar Collections.unmodifiableList() se precisar modificar a lista
- Se um método não foi implementado, implemente-o corretamente para evitar esse erro
Contribuições de Rodrigo Farias