| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/07/2007 20:51:05
|
RafaelVS
JavaEvangelist
![[Avatar]](/images/avatar/50454f95bbf5e6478cc0a55d08338731.jpg)
Membro desde: 13/12/2006 09:50:16
Mensagens: 405
Localização: Recife - PE
Offline
|
Pessoal, tem como saber a classe de um objeto mesmo se ele for null?
Sei que em Object tem o método getClass(), mas se eu chamá-lo a partir de um objeto null dá NullPointerException. Existe algum método estático em alguma classe que faça isso?
[]'s
|
- 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%) |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/07/2007 21:01:26
|
pango
Virtual Machine Man
Membro desde: 20/08/2005 16:31:37
Mensagens: 556
Localização: Pangolândia
Offline
|
Cara,
Experimenta o operador instanceof
|
programmer.setFucked(user.isStupid());
Sun Certified Java Programmer 1.4 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/07/2007 21:16:50
|
Zakim
JavaEvangelist
![[Avatar]](/images/avatar/e35d7a5768c4b85b4780384d55dc3620.jpg)
Membro desde: 21/07/2005 09:25:24
Mensagens: 482
Localização: Cuiabá - MT
Offline
|
pesquise sobre reflection
|
http://zakim.blogspot.com - Zakim
Sun Certified Java Programmer
Comece pequeno, pense grande e cresça rápido! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/07/2007 21:18:35
|
Zakim
JavaEvangelist
![[Avatar]](/images/avatar/e35d7a5768c4b85b4780384d55dc3620.jpg)
Membro desde: 21/07/2005 09:25:24
Mensagens: 482
Localização: Cuiabá - MT
Offline
|
e tbm.. nao tem como saber a classe de um objeto q nao existe certo
|
http://zakim.blogspot.com - Zakim
Sun Certified Java Programmer
Comece pequeno, pense grande e cresça rápido! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/07/2007 21:18:59
|
RafaelVS
JavaEvangelist
![[Avatar]](/images/avatar/50454f95bbf5e6478cc0a55d08338731.jpg)
Membro desde: 13/12/2006 09:50:16
Mensagens: 405
Localização: Recife - PE
Offline
|
Conheco e uso algumas coisas ja de Reflection, mas com isso é possível eu saber a classe de um objeto? achei que a idéira de Reflection fosse operar em cima de Classes, para conhecermos em tempo de execução a estrutura da classe, se herda ou implementa alguem e quem, seus atributos incluindo tipo e talvez modificadores, seus métodos, incluindo tipos de argumento, tipo de retorno, excecoes, se tem anottations, etc.
Mas com Reflection dá pra operar em cima de um objeto? em especial um objeto null?
|
- 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%) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/07/2007 21:21:16
|
RafaelVS
JavaEvangelist
![[Avatar]](/images/avatar/50454f95bbf5e6478cc0a55d08338731.jpg)
Membro desde: 13/12/2006 09:50:16
Mensagens: 405
Localização: Recife - PE
Offline
|
pango wrote:Cara,
Experimenta o operador instanceof
O instanceof não funciona porque eu preciso saber qual a classe do objeto independente de qual seja... Não tenho um subconjunto de classes pra testar o tipo do objeto...
Se eu fosse usar o instanceof teria um zilhões de if/else's e pra cada classe nova existente eu teria que colocar mais um if/else.
Mas valeu pela força!!
|
- 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%) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/07/2007 21:29:25
|
Zakim
JavaEvangelist
![[Avatar]](/images/avatar/e35d7a5768c4b85b4780384d55dc3620.jpg)
Membro desde: 21/07/2005 09:25:24
Mensagens: 482
Localização: Cuiabá - MT
Offline
|
o reflection serve para vc saber de onde o objeto vem, quais seu metodos e variaveis entre outros.
isso ajuda no reconhecimento automatizado de um objeto e seu tipo...
|
http://zakim.blogspot.com - Zakim
Sun Certified Java Programmer
Comece pequeno, pense grande e cresça rápido! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/07/2007 21:47:08
|
Aldrin Leal
JavaEvangelist
![[Avatar]](/images/avatar/ea8cd589f6cde4edf01ef2ad6b2d67d9.png)
Membro desde: 10/07/2007 17:04:34
Mensagens: 330
Localização: Belem / PA / Brazil
Offline
|
Rafael,
Você pode nos ajudar e dar mais detalhes sobre o que, afinal de contas, queres fazer? :)
|
-- Aldrin Leal, http://www.leal.eng.br/mnemetica/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/07/2007 08:29:33
|
RafaelVS
JavaEvangelist
![[Avatar]](/images/avatar/50454f95bbf5e6478cc0a55d08338731.jpg)
Membro desde: 13/12/2006 09:50:16
Mensagens: 405
Localização: Recife - PE
Offline
|
Oi, o que eu quero é generalizar uma chamada a um método através de Reflection.
Quero criar um método que recebe o objeto a invocar um método, o nome do método a ser invocado e apenas os argumentos. Usando Reflection, pra fazermos isso, precisamos pegar o método e invocá-lo, com o código abaixo:
Esse foi mais ou menos o código que eu coloquei pra chamar um método por Reflection, pois vários pontos da aplicação precisam desse código e resolvi centralizá-lo.
Só que, pra simplificar a chamada a tal método, gostaria de saber se tem como a partir de um objeto saber a classe dele para eu poder trocar a assinatura, retirando o parâmetro argumentoClasses e pegando o valor das classes dentro do próprio método, através do parâmetro argumentoObjetos.
Inicialmente eu estava usando objeto.getClass(), só que tem casos em que um objeto é null e, nesses casos, dá NullPointerException. Portanto, gostaria de saber se dado um objeto tem alguma forma de saber a classe dele, mesmo que ele seja null.
|
- 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%) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/07/2007 10:01:45
|
SmartCardMan
JavaChild
![[Avatar]](/images/avatar/fcc7fbed7c7c66964a52463e7498ad91.jpg)
Membro desde: 01/06/2006 09:32:04
Mensagens: 104
Localização: Santos
Offline
|
RafaelVC:
Tecnicamente creio que seja impossível vc conseguir o class name de um objeto não instanciado, ate porque ele não existe e portanto não há informação sobre ele que possa ser recuperada por reflection. Creio que a unica solução seria ou vc desconsiderar objetos nulos ou quem sabe talvez, fazer uma análise lexica do codigo e capturar os caracteres antes do nome do objeto.
A não ser que haja alguma API maluca que faça isso.. a que chega mais perto que conheço eh o commons-lang da apache... mas ficaria algo como:
Ele daria o nome se houvesse instância, e no caso de ser nulo ele retorna a string.
Quem souber de alguma API que faça o trabalho por gentileza me comunique!!!
|
---------------------------------------------
be free, be smart, be persistent ---------------------------------------------
http://jbossbrasil.org
Twitter: @samueltauil |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/07/2007 10:14:18
|
gomesrod
GUJ Ranger
![[Avatar]](/images/avatar/5de6755473dc988fe6c7db81f26a53ac.jpg)
Membro desde: 11/05/2007 19:46:22
Mensagens: 901
Offline
|
Eu acho que você não vai conseguir fazer isso não....
Se alguem com uma explicação teórica mais aprofundada puder me corrigir/completar fique à vontade, mas o que ocorre basicamente é que não existe um "null diferente para cada classe".
Por exemplo, faça o teste abaixo:
Você verá que não importa como a variável foi declarada, ela aponta para "nada" e esse "nada" não é objeto de nenhuma classe.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/07/2007 11:48:32
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
RafaelVS wrote:
Inicialmente eu estava usando objeto.getClass(), só que tem casos em que um objeto é null e, nesses casos, dá NullPointerException. Portanto, gostaria de saber se dado um objeto tem alguma forma de saber a classe dele, mesmo que ele seja null.
Mas um NullPointerException é exactamente o que deve dar.
Vc pode testar se o objeto é nulo e lançar outra exceção, mas é isso ai.
Mesmo que vc conseguisse obter a classe vc iria precisar de um objeto não nulo na API de reflection.
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/07/2007 11:57:20
|
SmartCardMan
JavaChild
![[Avatar]](/images/avatar/fcc7fbed7c7c66964a52463e7498ad91.jpg)
Membro desde: 01/06/2006 09:32:04
Mensagens: 104
Localização: Santos
Offline
|
gomesrod wrote:Eu acho que você não vai conseguir fazer isso não....
Se alguem com uma explicação teórica mais aprofundada puder me corrigir/completar fique à vontade, mas o que ocorre basicamente é que não existe um "null diferente para cada classe".
Por exemplo, faça o teste abaixo:
Você verá que não importa como a variável foi declarada, ela aponta para "nada" e esse "nada" não é objeto de nenhuma classe.
É exatamente isso!
Não existe objetos null especificos para cara objeto.
Não há instância não há informação sobre o objeto, ate porque ele nao existe.
E mesmo que vc ocnseguisse o nome da classe, vc nao poderia executar os metodos dele ja que daria NullPointerException de qualquer forma.
|
---------------------------------------------
be free, be smart, be persistent ---------------------------------------------
http://jbossbrasil.org
Twitter: @samueltauil |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/07/2007 12:07:19
|
RafaelVS
JavaEvangelist
![[Avatar]](/images/avatar/50454f95bbf5e6478cc0a55d08338731.jpg)
Membro desde: 13/12/2006 09:50:16
Mensagens: 405
Localização: Recife - PE
Offline
|
Como Java é fortemente tipada, eu achei que talvez tivesse alguma forma de Java saber isso buscando, em último caso, o tipo da variável. Porque isso ele conhece em tempo de compilação e, portanto, achei que tivesse uma forma de conhecer isso tb em tempo de execução. Algo como se o objeto for diferente de null, retorne o tipo do objeto que foi instanciado e se for igual a null retorne o tipo da variavel.
sergiotaborda wrote:
RafaelVS wrote:
Inicialmente eu estava usando objeto.getClass(), só que tem casos em que um objeto é null e, nesses casos, dá NullPointerException. Portanto, gostaria de saber se dado um objeto tem alguma forma de saber a classe dele, mesmo que ele seja null.
Mas um NullPointerException é exactamente o que deve dar.
Vc pode testar se o objeto é nulo e lançar outra exceção, mas é isso ai.
Mesmo que vc conseguisse obter a classe vc iria precisar de um objeto não nulo na API de reflection.
Usando o código que eu postei anteriormente eu consigo chamar métodos através de Reflection mesmo passando os argumentos nulos.
Ex.:
Se eu fizer uma chamada assim:
O meuMetodo será invocado onde os parâmetros terão os valores: a="a" e b=null.
Só que o que eu queria era retirar isso do meu código:
Class<?>[]{String.class, String.class} ( o 3. argumento do método invocaMetodo)
Dado que os tipos de parametro1 e parametro2 são String, gostaria, se possível, de uma forma que eu conseguisse as classes dos parametros.
|
- 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%) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/07/2007 12:53:07
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
RafaelVS wrote:
sergiotaborda wrote:
Mesmo que vc conseguisse obter a classe vc iria precisar de um objeto não nulo na API de reflection.
Usando o código que eu postei anteriormente eu consigo chamar métodos através de Reflection mesmo passando os argumentos nulos.
Eu não disse "argumentos nulos" eu disse "objeto nulo"
A API de reflection como o proprio nome indica reflete sobre o objeto
Ora se não ha nenhum objeto, ela vai refletir no quê ?
(na realidade sem objeto ela pode refletir na classe e invocar metodos estáticos, mas não o caso aqui)
É ilogico invocar um método sobre uma variável null, mesmo que seja por reflection. Por isso a exceção NullPointerException é a exceção correta.
Enfim, vc não deve invocar a sua API sobre variáveis nulas.
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
|
|