Sobes.tech
Junior

É possível usar strings na construção switch em Java?

sobes.tech IA

Resposta da IA

Sim. A partir do Java 7, é possível usar objetos do tipo String nas construções switch.

// Exemplo de uso de strings no switch
String status = "ACTIVE";
switch (status) {
    case "ACTIVE":
        System.out.println("Estado: Ativo");
        break;
    case "PENDING":
        System.out.println("Estado: Pendente");
        break;
    case "DELETED":
        System.out.println("Estado: Eliminado");
        break;
    default:
        System.out.println("Estado desconhecido");
}

Pontos importantes ao usar strings no switch:

  • A comparação de strings é feita usando o método equals(), que é menos eficiente do que comparar tipos primitivos.
  • Se a string no case ou o valor no switch for null, será lançada uma exceção NullPointerException. É necessário tratar esses casos antes do switch ou no bloco default.
  • Strings no case devem ser constantes em tempo de compilação.
  • A sensibilidade a maiúsculas e minúsculas importa. "Active" não é igual a "active".

Alternativas ao uso de strings no switch:

  • if-else if: A alternativa mais óbvia.
  • Enum: Método preferido para um conjunto limitado de valores possíveis. Garante segurança de tipos e melhor gestão do código.
// Exemplo de uso de enum
public enum Status {
    ACTIVE, PENDING, DELETED
}

// ...

Status currentStatus = Status.ACTIVE;
switch (currentStatus) {
    case ACTIVE:
        System.out.println("Estado: Ativo");
        break;
    case PENDING:
        System.out.println("Estado: Pendente");
        break;
    case DELETED:
        System.out.println("Estado: Eliminado");
        break;
    default:
        System.out.println("Estado desconhecido"); // Geralmente não necessário com enum
}
  • Map: Pode ser útil se a correspondência entre strings e ações for mais dinâmica ou extensa.
// Exemplo de uso de Map
Map<String, Runnable> actions = new HashMap<>();
actions.put("ACTIVE", () -> System.out.println("Estado: Ativo"));
actions.put("PENDING", () -> System.out.println("Estado: Pendente"));
actions.put("DELETED", () -> System.out.println("Estado: Eliminado"));

// ...

String status = "ACTIVE";
actions.getOrDefault(status, () -> System.out.println("Estado desconhecido")).run();

A escolha entre essas abordagens depende da tarefa específica, da legibilidade do código e da necessidade de segurança de tipos. Para um conjunto limitado e fixo de valores de string, geralmente, Enum é a melhor solução.