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
Rodrigo Farias
Desenvolvedor Java focado em aplicações corporativas e microsserviços.
Mais sobre o autor