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
caseou o valor noswitchfornull, será lançada uma exceçãoNullPointerException. É necessário tratar esses casos antes doswitchou no blocodefault. - Strings no
casedevem 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.