O que significa UnsupportedOperationException e como tratar esse erro?

UnsupportedOperationException ocorre quando tentamos executar uma operação que não é suportada por um objeto ou método específico.

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.

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

Compartilhe este tutorial: O que significa UnsupportedOperationException e como tratar esse erro

Compartilhe este tutorial

Continue aprendendo:

Como corrigir ConcurrentModificationException ao iterar sobre uma lista

ConcurrentModificationException ocorre quando uma coleção é modificada enquanto está sendo percorrida por um iterador.

Tutorial anterior

Como solucionar IllegalStateException em Java

IllegalStateException ocorre quando um método é chamado em um estado inválido do objeto, impedindo sua execução correta.

Próximo tutorial