Como obter enum a partir de string em Java: guia completo para iniciantes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Por que enum e string são companheiros eternos?

\n\n

Imagine: você está escrevendo um programa que recebe comandos do usuário. O usuário digita "RED", e seu programa deve entender que é a cor Color.RED. Ou você está lendo dados de um banco de dados, onde o status está armazenado como texto "ACTIVE", e no código você tem um enum Status.ACTIVE. Como relacionar string e enum? Esta é uma das perguntas mais populares no Stack Overflow entre desenvolvedores Java iniciantes — e hoje vamos resolvê-la de uma vez por todas.

\n\n

Neste artigo, você aprenderá:

\n
    \n
  • Como obter enum a partir de string em Java usando valueOf()
  • \n
  • Como lidar com situações em que a string não está no enum (para que o programa não quebre)
  • \n
  • Como escrever seu próprio método para conversão flexível
  • \n
  • Como trabalhar com maiúsculas/minúsculas e espaços
  • \n
\n

Vamos lá!

\n\n

1. O que é enum e por que convertê-lo para string?

\n\n

Enum (abreviação de enumeration — enumeração) é um tipo especial de dado em Java que contém um conjunto fixo de constantes. Por exemplo, dias da semana, cores, status de pedidos.

\n\n
public enum Color {\n    RED, GREEN, BLUE, YELLOW\n}
\n\n

Trabalhar com enum é conveniente: o código fica legível e o compilador verifica se você não está usando um valor inexistente. Mas frequentemente os dados vêm do mundo externo — de arquivos, bancos de dados ou entrada do usuário — na forma de strings. E surge o problema: como obter enum a partir de string em Java?

\n\n

2. Método básico: o método valueOf()

\n\n

A maneira mais simples e embutida é usar o método estático valueOf(), que existe em cada enum. Ele recebe uma string e retorna a constante enum correspondente. Importante: as strings devem coincidir com os nomes das constantes exatamente, incluindo maiúsculas/minúsculas.

\n\n
public class Main {\n    public static void main(String[] args) {\n        String input = "RED";\n        Color color = Color.valueOf(input);\n        System.out.println("Cor: " + color); // Saída: Cor: RED\n    }\n}\n\nenum Color {\n    RED, GREEN, BLUE\n}
\n\n

Funciona? Sim. Mas há um problema. Se você passar a string "red" (com letra minúscula) ou "PURPLE" (que não existe no enum), o Java lançará uma exceção IllegalArgumentException. E isso significa que o programa vai quebrar. Não é bom.

\n\n

3. Como evitar erros: tratamento de exceções

\n\n

Para que o programa não quebre, é necessário capturar a exceção. Isso é especialmente importante quando você obtém um enum a partir de uma string inserida pelo usuário.

\n\n
public static Color getColorFromString(String input) {\n    try {\n        return Color.valueOf(input.toUpperCase());\n    } catch (IllegalArgumentException e) {\n        System.out.println("Erro: a cor '" + input + "' não existe!");\n        return null; // ou valor padrão\n    }\n}\n\npublic static void main(String[] args) {\n    String userInput = "blue";\n    Color color = getColorFromString(userInput);\n    if (color != null) {\n        System.out.println("Você escolheu: " + color);\n    }\n}
\n\n

Observe: usamos input.toUpperCase() — isso permite aceitar strings em qualquer maiúscula/minúscula. Em Java, os nomes de enum são escritos em letras maiúsculas, então esse truque quase sempre funciona.

\n\n

4. Método avançado: método próprio com Map

\n\n

Às vezes, os nomes das constantes no enum não correspondem ao que vem de fora. Por exemplo, você tem um enum com nomes em português ou com espaços. Nesses casos, é necessário criar seu próprio mapeamento (mapping).

\n\n
import java.util.HashMap;\nimport java.util.Map;\n\npublic enum Status {\n    ACTIVE("ativo"),\n    INACTIVE("inativo"),\n    PENDING("pendente");\n\n    private final String displayName;\n\n    Status(String displayName) {\n        this.displayName = displayName;\n    }\n                

Blogs

Book Recommendations