Duvida Classe.class  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
vinids
Entusiasta Java

Membro desde: 11/10/2011 14:05:21
Mensagens: 24
Offline

Ola povo!

Tentando fazer um algoritmo que me retorna-se se duas classes eram do mesmo tipo fuçando com o eclipse eu consegui fazer, mas não entendi como foi feito.
No caso tenho uma superClasse Funcionario com algumas subClasses, e em um laço com todas essas subclasses misturadas preciso saber qual é de uma determinada subClasse.
Eis o algoritmo em questão:



Oq eu não entendo é esse .class no final, qualquer luz seria de grande ajuda!!
rmendes08
GUJ Master
[Avatar]

Membro desde: 29/05/2008 14:09:28
Mensagens: 1617
Online

O .class é chamado de token de classe e retorna um objeto do tipo Class<?> que representa a classe pela qual você acessa o token.

"A Técnica é transformada em Arte por quem a emprega"

"O futuro pertence àqueles que acreditam na beleza de seus sonhos"

Computadores Fazem Arte

http://www.uaijug.com.br

"É importante estabelecer uma estrutura de alto nível, mas isso não significa criar uma infinidade de diagramas de classes detalhados."
mauricioadl
GUJ Master
[Avatar]

Membro desde: 10/05/2007 14:52:21
Mensagens: 1140
Offline

nao tem como ter um array de classes misturadas, nao eh necessario a comparacao ja que todas elas sao da mesma classe e consequentemente herdeiros do mesmo pai.

Seu problema foi resolvido? Por favor, edite seu primeiro post e adicione [RESOLVIDO] no título.
O forum agradece.
[Email] [MSN]
rmendes08
GUJ Master
[Avatar]

Membro desde: 29/05/2008 14:09:28
Mensagens: 1617
Online

mauricioadl wrote:nao tem como ter um array de classes misturadas, nao eh necessario a comparacao ja que todas elas sao da mesma classe e consequentemente herdeiros do mesmo pai.


Claro que pode! Se tudo o mais falhar, você pode declarar um array de Object's :


"A Técnica é transformada em Arte por quem a emprega"

"O futuro pertence àqueles que acreditam na beleza de seus sonhos"

Computadores Fazem Arte

http://www.uaijug.com.br

"É importante estabelecer uma estrutura de alto nível, mas isso não significa criar uma infinidade de diagramas de classes detalhados."
vinids
Entusiasta Java

Membro desde: 11/10/2011 14:05:21
Mensagens: 24
Offline

rmendes08
Isso quer dizer que ele retorna o tipo da classe, desculpa mas não entendi direito!!

mauricioadl
Sim são todas da superClasse Funcionario, mas quero identificar de qual subClasse cada uma pertence!!
rmendes08
GUJ Master
[Avatar]

Membro desde: 29/05/2008 14:09:28
Mensagens: 1617
Online

Em Java existe uma classe chamada Class, que representa justamente informações de uma classe em tempo de execução. Para cada classe carregada no seu programa existe um objeto da classe Class com essas informações. Ele pode ser acessado tanto pelo método getClass() do objeto quanto pela constante .class, acessada pelo nome da classe.

"A Técnica é transformada em Arte por quem a emprega"

"O futuro pertence àqueles que acreditam na beleza de seus sonhos"

Computadores Fazem Arte

http://www.uaijug.com.br

"É importante estabelecer uma estrutura de alto nível, mas isso não significa criar uma infinidade de diagramas de classes detalhados."
mauricioadl
GUJ Master
[Avatar]

Membro desde: 10/05/2007 14:52:21
Mensagens: 1140
Offline

rmendes08 wrote:
mauricioadl wrote:nao tem como ter um array de classes misturadas, nao eh necessario a comparacao ja que todas elas sao da mesma classe e consequentemente herdeiros do mesmo pai.


Claro que pode! Se tudo o mais falhar, você pode declarar um array de Object's :



mesmo assim sera um array da classe object. o que muda sao as instancias e devera entao usar a palavra intanceof para comparar e nao == ou etquals

This message was edited 1 time. Last update was at 05/02/2012 17:38:54


Seu problema foi resolvido? Por favor, edite seu primeiro post e adicione [RESOLVIDO] no título.
O forum agradece.
[Email] [MSN]
rmendes08
GUJ Master
[Avatar]

Membro desde: 29/05/2008 14:09:28
Mensagens: 1617
Online

mauricioadl wrote:
rmendes08 wrote:
mauricioadl wrote:nao tem como ter um array de classes misturadas, nao eh necessario a comparacao ja que todas elas sao da mesma classe e consequentemente herdeiros do mesmo pai.


Claro que pode! Se tudo o mais falhar, você pode declarar um array de Object's :



mesmo assim sera um array da classe object. o que muda sao as instancias e devera entao usar a palavra intanceof para comparar e nao == ou etquals


Claro que pode, vai funcionar perfeitamente. Um método sobrescrito sempre executa a versão da classe da instância, logo, o método getClass() retornará a classe real do objeto, e não o tipo da referência.

This message was edited 1 time. Last update was at 08/02/2012 08:43:13


"A Técnica é transformada em Arte por quem a emprega"

"O futuro pertence àqueles que acreditam na beleza de seus sonhos"

Computadores Fazem Arte

http://www.uaijug.com.br

"É importante estabelecer uma estrutura de alto nível, mas isso não significa criar uma infinidade de diagramas de classes detalhados."
GLEMES
Entusiasta Java
[Avatar]

Membro desde: 03/10/2009 21:05:39
Mensagens: 18
Localização: Pelotas/RS
Offline

Discordo de vc rmendes08!! O tipo de REFERÊNCIA determina qual método sobrecarregado será usado em tempo de compilação e não em tempo de execução como em um teste IF. Portanto vinids, use instanceof ou o equals para testar se uma determinada classe passa no teste É-UM. Porém teste as referências e não FucnionarioEnsinoBasico.class.

Flw!!
[MSN]
rmendes08
GUJ Master
[Avatar]

Membro desde: 29/05/2008 14:09:28
Mensagens: 1617
Online

GLEMES wrote:Discordo de vc rmendes08!! O tipo de REFERÊNCIA determina qual método sobrecarregado será usado em tempo de compilação e não em tempo de execução como em um teste IF. Portanto vinids, use instanceof ou o equals para testar se uma determinada classe passa no teste É-UM. Porém teste as referências e não FucnionarioEnsinoBasico.class.

Flw!!


Veja bem GLEMES, acho que você não entendeu. Para você acessar um método é preciso que ele esteja declarado no tipo de referência da variável (ou expressão) e que ele seja visível (public, protected, etc.). Uma vez que o método é acessível pela referência, a versão que de fato vai executar é a versão declarada no tipo da instância referenciada. Caso fosse diferente, se você chamasse um método por um refeência cujo tipo é uma interface você receberia um erro, pois interfaces não definem implementação, sacou ? Exemplo:



execute o código acima e você vai entender.


"A Técnica é transformada em Arte por quem a emprega"

"O futuro pertence àqueles que acreditam na beleza de seus sonhos"

Computadores Fazem Arte

http://www.uaijug.com.br

"É importante estabelecer uma estrutura de alto nível, mas isso não significa criar uma infinidade de diagramas de classes detalhados."
GLEMES
Entusiasta Java
[Avatar]

Membro desde: 03/10/2009 21:05:39
Mensagens: 18
Localização: Pelotas/RS
Offline

rmendes08 wrote:Veja bem GLEMES, acho que você não entendeu. Para você acessar um método é preciso que ele esteja declarado no tipo de referência da variável (ou expressão) e que ele seja visível (public, protected, etc.). Uma vez que o método é acessível pela referência, a versão que de fato vai executar é a versão declarada no tipo da instância referenciada. Caso fosse diferente, se você chamasse um método por um refeência cujo tipo é uma interface você receberia um erro, pois interfaces não definem implementação, sacou ?


rmendes08, nós estamos falando sobre métodos sobrecarregados!! No seu exemplo não há sobrecarga de método. Em métodos sobrescritos funciona exatamente como vc disse, mas não em métodos sobrecarregados, que foi a afirmação que vc fez anteriormente.
[MSN]
rmendes08
GUJ Master
[Avatar]

Membro desde: 29/05/2008 14:09:28
Mensagens: 1617
Online

Putz, foi mal, confundi os termos ...

"A Técnica é transformada em Arte por quem a emprega"

"O futuro pertence àqueles que acreditam na beleza de seus sonhos"

Computadores Fazem Arte

http://www.uaijug.com.br

"É importante estabelecer uma estrutura de alto nível, mas isso não significa criar uma infinidade de diagramas de classes detalhados."
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team