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.
[quote=sergiotaborda][quote=RafaelVS]
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.
[/quote]
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.[/quote]
Usando o código que eu postei anteriormente eu consigo chamar métodos através de Reflection mesmo passando os argumentos nulos.
Ex.:
public Object invocaMetodo(Object objeto, String nomeMetodo, Class<?>[] argumentoClasses, Object[] argumentoObjetos) throws Exception {
Method metodo = action.getClass().getMethod(this.metodo, argumentosClasses);
retorno = (ActionForward)metodo.invoke(action, argumentosObjetos);
}
public void meuMetodo(String a, String b){}
Se eu fizer uma chamada assim:
...
String parametro1 = "a";
String parametro2 = null;
invocaMetodo(objetoInstanciado, "meuMetodo", new Class<?>[]{String.class, String.class}, new Object[]{parametro1, parametro2});
...
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.