Essa vai ser rápida, em 5 minutinhos você já vai saber tudo o que precisa sobre Enum.
Enum é um tipo especial, um conjuntos de constantes organizados em ordem de declaração utilizado para representar constantes, utilizado para grupar valores com o mesmo sentido dentro de uma única estrutura, mas não apenas isso. A forma de se criar um Enum é muito parecido com uma classe, PARECIDO, mas não igual. Parece uma classe com apenas um construtor privado(não se pode instanciar um Enum) e que ao invés da palavra reserva Class, utiliza a palavra reservada Enum.
Vamos ao exemplo de um Enum, pois um exemplo vale mais do que mil palavras:
public enum Fabricante {
SONY(1), MICROSOFT(2), NINTENDO(3);
private final int id;
Fabricante(int id) {
this.id = id;
}
public int getId() {
return id;
}
}
Criei um tipo Enumerado para armazenar os Fabricantes de vídeo games. Assim quando definir um parâmetro como Fabricante, ele só aceitará as opções: SONY, MICROSOFT e WII. Isso evita que quem utilizar o método passe como parâmetro algo inválido, e também deixa o código mais claro do que passar simplesmente um número qualquer.
public class TestaEnunFabricante {
public void facaAlgoQuePreciseDeUmFabricante(Fabricante fabricante){
System.out.println(fabricante.getId() + " " + fabricante);
}
public static void main(String[] args) {
TestaEnunFabricante teste = new TestaEnunFabricante();
teste.facaAlgoQuePreciseDeUmFabricante(Fabricante.SONY);
teste.facaAlgoQuePreciseDeUmFabricante(Fabricante.MICROSOFT);
teste.facaAlgoQuePreciseDeUmFabricante(Fabricante.NINTENDO);
}
}
Perceba que se tentar passar qualquer coisa diferente como parâmetro o código não compilará.
Agora vamos brincar um pouco mais. Crie o tipo Enumerado(Enum) Console, que possui um tipo Enumerado Fabricante:
public enum Console {
PS4(1, Fabricante.SONY), XBOX360(2, Fabricante.MICROSOFT), PS3(3, Fabricante.SONY), XBOX(4, Fabricante.MICROSOFT), PS2(5, Fabricante.SONY), WII(6, Fabricante.NINTENDO);
private final int id;
private final Fabricante fabricante;
Console(int id, Fabricante fabricante) {
this.id = id;
this.fabricante = fabricante;
}
public int getId() {
return id;
}
public Fabricante getFabricante(){
return fabricante;
}
}
“Ual, pode isso Arnaldo? A regra é clara, pode sim!”
No Construtor do Enum Console, passei qual o Enum Fabricante e o armazenei em uma variável de instancia, depois criei um método para retornar o Enum Fabricante armazenado.
Na maioria das vezes o Enum representa um id de algo que esteja em um banco de dados, então em algum momento você vai receber o id e não o Enum já tipificado, então você precisará obter o Enum pelo seu id, isso será bastante comum.
Então vamos incrementar o exemplo mais um pouco e mostrar como obter o Enum pelo seu id. Vou alterar um pouco os Enuns Console e Fabricante e gerar um novo exemplo:
public enum Console {
PS4(1, Fabricante.SONY), XBOX360(2, Fabricante.MICROSOFT), PS3(3, Fabricante.SONY), XBOX(4, Fabricante.MICROSOFT), PS2(5, Fabricante.SONY), WII(6, Fabricante.NINTENDO);
private final int id;
private Fabricante fabricante;
Console(int id, Fabricante fabricante) {
this.id = id;
this.fabricante = fabricante;
}
public int getId() {
return id;
}
public Fabricante getFabricante(){
return fabricante;
}
public static Console getConsolePeloID(int id){
for(Console console : Console.values()){
if(console.getId() == id)
return console;
}
return null;
}
}
public enum Fabricante {
SONY(1), MICROSOFT(2), NINTENDO(3);
private final int id;
Fabricante(int id) {
this.id = id;
}
public int getId() {
return id;
}
public Fabricante getFabricantePeloID(int id){
for(Fabricante fabricante : Fabricante.values()){
if(fabricante.getId() == id)
return fabricante;
}
return null;
}
}
public class TesteEnumFinal {
public void conectarNetwork(Console console){
if(console.getFabricante() == Fabricante.SONY)
System.out.println("Conectando Playstation Network");
else if(console.getFabricante() == Fabricante.MICROSOFT)
System.out.println("Conectando Microsoft Live");
else if(console.getFabricante() == Fabricante.NINTENDO)
System.out.println("Não é possível conectar");
}
public static void main(String[] args) {
TesteEnumFinal teste = new TesteEnumFinal();
teste.conectarNetwork(Console.PS2);
teste.conectarNetwork(Console.PS4);
teste.conectarNetwork(Console.XBOX);
teste.conectarNetwork(Console.WII);
System.out.println(Console.getConsolePeloID(1));
System.out.println(Console.getConsolePeloID(2));
}
}
Executando o exemplo acima a saída será:
Conectando Playstation Network Conectando Playstation Network Conectando Microsoft Live Não é possível conectar PS4 XBOX360
Parabéns, em menos de 5 minutos você já aprendeu como utilizar um Enum. Continue assim e um dia você poderá ser ser um Bom Programador.
Bibliografia
http://www.devmedia.com.br/tipos-enum-no-java/25729
https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html
http://www.tiexpert.net/programacao/java/enum.php