Tipo enum, dúvida

10 respostas
gugabarc

Quando é utilizada as enumerações?

Por exemplo, eu tenho que criar um software de uma loja de CDs, as classificações dos álbuns poderiam ser do tipo enum? Caso sim, como eu faço um método que retorne a classificação de um álbum?

public class Loja{
   private enum Classificacao{JAZZ, POP, ROCK};
   private Classificacao cdClassific;
   private String titulo;

   public Loja(String t, Classificacao c){
      titulo = t;
      cdClassific = c;
   }

   public Classificacao getClassificacao(){
      return cdClassific;
   }

Esse código acredito estar errado, mas queria passar a minha idéia, como poderia ser feito? Ou é melhor classificação se uma String?

No metodo getClassificacao() aparece um alerta do netbeans: “Exporting non-public type through public API”. O que significa?

valeu

10 Respostas

rafaelglauber

Guga,

Acho que com isso aqui você consiga usar. Sobre quando usar essa pergunta é mais complicada, vai realmente depender do que se deseja.

ps. lembre-se de usar a versão 1.5 ou superior para se beneficiar do Enum.

rafachies

Cara...ve se isso te clareia um pouco..
também não sei se ta compilando ...só fiz rapidão no vi aki
[]'s

public class CDDisk {
	private String title;
	private DiskGenre diskGenre;
	
	public static void main(String args[]){
		CDDisk cdDisk = new CDDisk();
		cdDisk.setDiskGenre(DiskGenre.ROCK);
	}

	public DiskGenre getDiskGenre() {
		return diskGenre;
	}

	public void setDiskGenre(DiskGenre diskGenre) {
		this.diskGenre = diskGenre;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}
}


public enum DiskGenre {
	ROCK(0, "rock"),
	REGGAE(1, "reggae"),
	MPB(2, "mpb");
	
	
	private int value;
	private String description;
	
	DiskGenre(int value, String description){
		this.description = description;
		this.value = value;
	}

	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	public int getValue() {
		return value;
	}

	public void setValue(int value) {
		this.value = value;
	}
}
gugabarc

acho que peguei ±

mas seria melhor usar enum msmo do q String?

qual a necessidade do value no exemplo?

valeu ;D

gugabarc

Ja resolvi as duvidas acima, mas agora tenho outra

Vamos supor que a loja venda CDs e DVDs, vou ter uma superclasse Produto

public abstract class Produto{
   private String titulo;
   private int codigo;
}

Daí tem duas subclasses: ProdCDs e ProdDVDs

public class ProdCDs extends Produto{
   private DiskGenre diskGenre;

   public ProdCDs( DiskGenre diskGenre){
      this.diskGenre = diskGenre;
   }

   public DiskGenre getClassificacao){
      return diskGenre;
   }
}
public class ProdDVDs extends Produto{
   private DvdGenre dvdGenre;

   public ProdDVDs( DvdGenre dvdGenre){
      this.dvdGenre = dvdGenre;
   }

   public DvdGenre getClassificacao(){
      return dvdGenre;
   }
}

Daí crio uma classe pra testar

public class Teste {

    public static void main(String[] args) {

        Produto prod;
        prod = new ProdCDs(...) // Como coloco o genero do CD aí dentro?
    }

como coloco o genero do CD no parametro?

victorwss

gugabarc:
No metodo getClassificacao() aparece um alerta do netbeans: “Exporting non-public type through public API”. O que significa?

Significa que você tem um método público getClassificacao() que só pode ser operado por alguém que tem acesso a algo não público (o enum Classificacao), o que faz com que apesar dele ser declarado como público, não possa ser usado como tal.

Mais ou menos assim:

O método getClassificacao é público então a classe Xyz pode chamar. Este método retorna alguma coisa, porém essa coisa, por ser privada é desconhecida para Xyz.

Ou seja, você colocou um tipo de retorno não-público em um método público.

rafachies
public static void main(String[] args) {  
   
         Produto prod;  
         prod = new ProdCDs(DVDGenre.MOVIE) // Como coloco o genero do CD aí dentro?  
 }

Para isto vc vai terá que criar o enum DVDGenre também ..do mesmo modo como ilustrei para o DiskGenre , colocando os tipos MOVIE, MUSICAL, CARTOON, etc...

victorwss

Acho importante você saber quando usar o enum (acho que essa é a sua pergunta original).

Para saber se o seu dado deve ser um enum, pergunte:

Se as respostas a estas perguntas forem sim, sim, sim, não, não e não, então é um enum. Se alguma das respostas for diferente, então provavelmente não será um enum.

Por exemplo, dias-da-semana, temos domingo, segunda, terça, quarta, quinta, sexta e sábado. São só estes? SIM. Sempre estes? SIM. Exatamente estes? SIM. Ninguém pode inventar outro? NÃO. Ninguém pode destruir um destes? NÃO. Isso nunca vai mudar? NÃO. É um enum.

Outro exemplo, naipes. Temos ouros, copas, paus e espadas. São só estes? SIM. Sempre estes? SIM. Exatamente estes? SIM. Ninguém pode inventar outro? NÃO. Ninguém pode destruir um destes? NÃO. Isso nunca vai mudar? NÃO. É um enum.

E agora classificação de músicas. Temos Jazz, Rock e Pop. São só estes? NÃO, pode ter MPB, clássica, funk, axé… Sempre estes? NÃO. Exatamente estes NÃO. Ninguém pode inventar outro? Pode, pode se inventar outros. Ninguém pode destruir um destes? Talvez possa. Isso nunca vai mudar? Talvez mude com alguma freqüência. NÃO DEVE SER UM ENUM.

gugabarc

discordo, vai em sites cmo submarino, tem determinadas classificações de CDs… pode ser que surja uma excessão mas daí pode ter uma categoria chamada “Outras”

categorias existem específicas e alguém tem que incluir um produto dentro delas, e não escrever uma categoria cada vez que registrar um produto, na minha opiniao

victorwss

Isso é porque “Outras” seria algo que não foi cadastrado no banco de dados. Quando eles virem que “ah, seria legal colocar uma categoria específica para pancadão”, eles só tem que colocar um registro no banco de dados e atualizar umas chaves estrangeiras, sem recompilar nenhum código, fazer deploy ou qualquer coisa assim.

gugabarc

bom, valeu, é bom saber disso, mas como é um trabalho só de faculdade vou deixar assim :stuck_out_tongue_winking_eye:

valeu a todos q ajudaram ae

Criado 27 de abril de 2008
Ultima resposta 29 de abr. de 2008
Respostas 10
Participantes 4