Fácil Java
Enum simples com método
Enunciado
Crie um enum NivelAcesso com as constantes ADMIN, USUARIO e CONVIDADO. Cada constante deve ter um campo nivel (int) e um método getNivel(). No main, percorra todas as constantes com values() e imprima nome - nivel.
Requisitos
- O enum deve ter um campo
nivele um construtor que o inicializa. - O método
getNivel()deve retornar o valor do campo. - O
maindeve usarvalues()para percorrer e imprimir todas as constantes.
Código inicial
public class ExercicioEnum {
enum NivelAcesso {
// TODO: defina as constantes com seus níveis
}
public static void main(String[] args) {
// TODO: percorra e imprima
}
}
Saída esperada
ADMIN - 3
USUARIO - 2
CONVIDADO - 1
Ver dica
No enum, defina as constantes passando o valor no construtor: ADMIN(3). Use um loop for (NivelAcesso n : NivelAcesso.values()).
Mostrar solução
public class ExercicioEnum {
enum NivelAcesso {
ADMIN(3),
USUARIO(2),
CONVIDADO(1);
private final int nivel;
NivelAcesso(int nivel) {
this.nivel = nivel;
}
public int getNivel() {
return nivel;
}
}
public static void main(String[] args) {
for (NivelAcesso n : NivelAcesso.values()) {
System.out.println(n + " - " + n.getNivel());
}
}
}
Passo a passo
- Declaramos o enum
NivelAcessocom três constantes:ADMIN,USUARIOeCONVIDADO. - Cada constante recebe um valor inteiro entre parênteses, que será passado ao construtor.
- O construtor
NivelAcesso(int nivel)armazena o valor no camponivel. - O método
getNivel()expõe o valor para ser lido externamente. - No
main, usamosNivelAcesso.values()para obter um array com todas as constantes. - O loop
forpercorre esse array e imprime o nome da constante seguido do nível.
Por que funciona
Cada constante de um enum é uma instância única da classe enum. Ao definir um construtor, podemos associar dados a cada instância. O método values() é gerado automaticamente pelo compilador e retorna as constantes na ordem de declaração, permitindo iteração simples.
Erros comuns
- Esquecer o ponto e vírgula após a última constante antes de declarar campos:
CONVIDADO(1)sem;gera erro de compilação. - Tentar acessar
niveldiretamente de fora: o campo é privado; usegetNivel(). - Declarar o construtor como
publicdesnecessariamente: em enums, o construtor é implicitamente privado.
Outra forma de resolver
Se não precisar de valores associados, pode usar um enum simples e um switch para obter o nível:
enum NivelAcesso { ADMIN, USUARIO, CONVIDADO }
// ...
int nivel = switch (n) {
case ADMIN -> 3;
case USUARIO -> 2;
case CONVIDADO -> 1;
};
Essa abordagem é preferível quando os dados são derivados apenas do nome e não há muitos campos.
Saída esperada
ADMIN - 3
USUARIO - 2
CONVIDADO - 1