Enum ?  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
Raff
Virtual Machine Man
[Avatar]

Membro desde: 31/07/2006 10:31:45
Mensagens: 642
Localização: Marilia - SP / São Carlos -SP
Offline

Pessoal qual a deferença em declarar um enum dentro de uma classe e declarar um enum fora de um classe ?

ex:
ex2


Pessoal outro coisa que eu tenho duvida tbm é por que o construtor de enum so deve ser private ???
Pessoal não to entendendo muito bem Enum se alguem poder me dar um explicação como eles funcionam agradeço !!!!!!


SCJP 5.0
SCWCD 5.0
Mestrando UFSCAR...
[Email] [MSN]
geraldobarboza
JavaTeenager

Membro desde: 22/05/2005 15:24:41
Mensagens: 150
Offline

a diferenca é só na chamada..

um vc chama direto o enum e outro precisa usar a classe.

acho q é isso

thiago.correa
GUJ Master
[Avatar]

Membro desde: 26/03/2006 18:54:30
Mensagens: 1861
Offline

Enum dentro de uma classe funciona como uma innerclass, ou seja ela não é "visível" para as demais classe, so para a classe onde a mesma se encontra!

---
"Se não puder ajudar, atrapalhe, afinal de contas o importante é participar!"
Thiago
[MSN]
Java Player
JavaTeenager
[Avatar]

Membro desde: 17/08/2006 17:11:57
Mensagens: 180
Offline

Veja esse exemplo de código que você vai entender:


SCPJ 6 - 93%

Quizzes .com.br
Jogos para Celular .com.br
Jogos para Android .com.br
Android Gameplay .com
Raff
Virtual Machine Man
[Avatar]

Membro desde: 31/07/2006 10:31:45
Mensagens: 642
Localização: Marilia - SP / São Carlos -SP
Offline

Pessoal andei lendo e vi que não se poder instanciar um Enum, digo dar new em um enum será que é por isso que o construtor de um enum tem que ser private ??


SCJP 5.0
SCWCD 5.0
Mestrando UFSCAR...
[Email] [MSN]
RafaelVS
JavaEvangelist
[Avatar]

Membro desde: 13/12/2006 09:50:16
Mensagens: 405
Localização: Recife - PE
Offline

O construtor do enum tem que ser private porque esse não pode ser chamado fora do enum, isto é, o construtor só existe porque quando vc declara uma constante de enum com argumentos, o seu construtor vai ser chamado internamente pela JVM para atribuir os argumentos às constantes. Nem mesmo você dentro do enum pode chamar o construtor do Enum. É impossível o programador chamar o construtor do enum.

- Mestrando em Engenharia de Software no CIn/UFPE;
- Pós-Graduado em Engenharia de Software na POLI/UPE;
- Bacharel em Ciência da Computação na UNICAP (Universidade Católica de Pernambuco);
- Sun Certified Programmer for the Java 2 Platform, Standard Edition 5.0 (score 95%);
- Sun Certified Web Components Developer for J2EE 1.4 Platform (score 89%)
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

thiago.correa wrote:Enum dentro de uma classe funciona como uma innerclass, ou seja ela não é "visível" para as demais classe, so para a classe onde a mesma se encontra!


Isso não é verdade. Qualquer Inner class estática e pública pode ser usada fora da classe onde foi declarada, como o caso do enum.

É útil pq muitos enums tem nomes similares como Tipo e seus valores estarão diretamente associados à uma classe específica. Então, é até melhor que eles estejam intrinsecamente ligados à classe a qual pertencem, como no exemplo aqui embaixo:





@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Raff wrote:Pessoal andei lendo e vi que não se poder instanciar um Enum, digo dar new em um enum será que é por isso que o construtor de um enum tem que ser private ??


É isso mesmo. Uma vez declarada, você não pode criar novos itens na enumeração. Até porque, isso iria ferir o conceito de enum.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
RafaelVS
JavaEvangelist
[Avatar]

Membro desde: 13/12/2006 09:50:16
Mensagens: 405
Localização: Recife - PE
Offline

Raff wrote:





Aproveitando o exemplo que o Raff deu sobre enum para explicar melhor:

Quando a JVM for carregar o enum Naipe ela vai rodar o construtor que recebe um int. Com isso, as constantes terão seus atributos inicializados com o valor passado como argumento.

Ou seja, você pode fazer:




A diferença de declarar dentro ou fora da classe é que se você estiver fora da classe onde o enum foi declarado você vai precisar informar o caminho da classe para acessar as constantes do enum (como um membro estático).

Java Player wrote:



Em uma outra classe você precisaria fazer:




thiago.correa wrote:
Enum dentro de uma classe funciona como uma innerclass, ou seja ela não é "visível" para as demais classe, so para a classe onde a mesma se encontra!


Assim como inner classes, O enum é visível em outras classes de acordo com seu nível de acesso. Exemplo, Se uma inner class for public, ela é acessada de outras classes. O mesmo ocorre para o enum.

- Mestrando em Engenharia de Software no CIn/UFPE;
- Pós-Graduado em Engenharia de Software na POLI/UPE;
- Bacharel em Ciência da Computação na UNICAP (Universidade Católica de Pernambuco);
- Sun Certified Programmer for the Java 2 Platform, Standard Edition 5.0 (score 95%);
- Sun Certified Web Components Developer for J2EE 1.4 Platform (score 89%)
RafaelVS
JavaEvangelist
[Avatar]

Membro desde: 13/12/2006 09:50:16
Mensagens: 405
Localização: Recife - PE
Offline

Outra coisa importante a ser vista sobre enums é que eles podem ser usados em switchs:


- Mestrando em Engenharia de Software no CIn/UFPE;
- Pós-Graduado em Engenharia de Software na POLI/UPE;
- Bacharel em Ciência da Computação na UNICAP (Universidade Católica de Pernambuco);
- Sun Certified Programmer for the Java 2 Platform, Standard Edition 5.0 (score 95%);
- Sun Certified Web Components Developer for J2EE 1.4 Platform (score 89%)
thiago.correa
GUJ Master
[Avatar]

Membro desde: 26/03/2006 18:54:30
Mensagens: 1861
Offline

Ok chupei bala sorry!

---
"Se não puder ajudar, atrapalhe, afinal de contas o importante é participar!"
Thiago
[MSN]
Toni_Fatec
JavaTeenager

Membro desde: 09/05/2006 20:01:16
Mensagens: 165
Offline

ViniGodoy wrote:
Raff wrote:Pessoal andei lendo e vi que não se poder instanciar um Enum, digo dar new em um enum será que é por isso que o construtor de um enum tem que ser private ??


É isso mesmo. Uma vez declarada, você não pode criar novos itens na enumeração. Até porque, isso iria ferir o conceito de enum.


Um tipo ENUM define constantes que não podem ser modificadas, por isso eles são final implicitamente.

RafaelVS wrote:
A diferença de declarar dentro ou fora da classe é que se você estiver fora da classe onde o enum foi declarado você vai precisar informar o caminho da classe para acessar as constantes do enum (como um membro estático).

exato porque as enum são realmente tipos static, porem novemente isto fica implicito em TODOS os tipos enum.

Tecnológo em Informática para Gestão de Negócios - UNESP/FATEC
[Email] [MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Toni_Fatec wrote:
É isso mesmo. Uma vez declarada, você não pode criar novos itens na enumeração. Até porque, isso iria ferir o conceito de enum.


E quando foi que eu disse o contrário?

Eu recomendo a todos a leitura do item 21 do livro effective java, que pode ser lido neste pdf. Ele explica como o typesafe enum pattern é implementado. O tipo enum do java é apenas um syntax suggar espertinho para esse pattern. Ele também dá considerações sobre o que pode ser feito com o enum e como.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
andredecotia
JWizard
[Avatar]

Membro desde: 19/10/2009 14:37:32
Mensagens: 2267
Localização: São Paulo
Offline

Help me... Senão não vou dormir hoje hehehe...

não tou conseguindo comparar o valor do enum usando equals...

Veja meu código:


e o enum:


--
André AS


Analista Programador Java Web freelancer / home office
Linkedin: http://www.linkedin.com/profile/view?id=41470291&trk=tab_pro

[Email] [MSN] [ICQ]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

andredecotia wrote:Help me... Senão não vou dormir hoje hehehe...


Se vc já abriu seu tópico, para que ressuscitar esse? E como disse o bezier curve:
Um enum é sempre diferente de uma String, não?

O método equals sempre retorna false para tipos diferentes.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team