Enum em 5 minutos

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

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s