Java

Wednesday, May 03, 2006

 

enums

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";}
}

Comments: Post a Comment



<< Home

Archives

March 2006   April 2006   May 2006   July 2006   August 2006  

This page is powered by Blogger. Isn't yours?