Enums podem ser declarados como uma classe ou no interior de outra classe, desde que esta última seja declarada como
public ou
default. Enums não podem ser declarados no interior de um método.
enum Marcas {FIAT, FORD, FERRARI}
public class UsaMarcas{
public static void main(String args[]){
Marcas marca = Marcas.FIAT;
}
}
O código abaixo também é legal:
public class UsaMarcas{
enum Marcas {FIAT, FORD, FERRARI}
public static void main(String args[]){
Marcas marca = Marcas.FIAT;
}
}
A sintaxe do enum permite que ele seja declarado com um ponto e vírgula ao final. É optativo colocá-lo:
enum Marcas {FIAT, FORD, FERRARI};
Enums podem ter construtores e métodos, permitindo, assim, um comportamento mais flexível:
enum Marcas {FIAT("uno"), FORD("Ka"), FERRARI("F40");
Marcas(String modelo){ this.modelo = modelo;};
private String modelo;
public String getModelo(){return modelo;}
}
public class UsaMarcas{
public static void main(String args[]){
Marcas marca = Marcas.FIAT;
System.out.println(marca.getModelo());
}
}
O construtor de um enum não pode ser chamado diretamente. Isso não existe:
Marcas marca = new Marcas(FIAT,"uno");
Marcas marca = new Marcas.FIAT("uno");
Métodos do enum podem ser sobrescritos após a declaração de um dos seus valores. Imagine que desejamos que apenas o valor FERRARI retorne "classe A" no metodo
getTipo() e os outros valores do enum Marcas retornem "classe B". Neste caso,
fazemos assim:
enum Marcas {FIAT("uno"), FORD("Ka"), FERRARI("F40"){
public String getTipo(){return "classe A";}
};
Marcas(String modelo){ this.modelo = modelo;};
private String modelo;
public String getModelo(){return modelo;}
public String getTipo(){return "classe B";}
}
public class UsaMarcas{
public static void main(String args[]){
Marcas marca = Marcas.FIAT;
System.out.println(marca.getModelo());
System.out.println(marca.getTipo());
marca = Marcas.FERRARI;
System.out.println(marca.getTipo());
}
}
A execução desse código resultaria:
uno
classe B
classe A
Sobrescrevemos o método desejado imediatamente após a declaração do valor do enum.
enum Marcas {FIAT("uno"), FORD("Ka"){
public String getTipo(){return "classe A";}
}, FERRARI("F40");
Marcas(String modelo){ this.modelo = modelo;};
private String modelo;
public String getModelo(){return modelo;}
public String getTipo(){return "classe B";}
}