Ajuda - Chamada de método em tempo de execução (invoke)

Boa noite,

Estou usando reflexão e tentei usar invoke para executar o método getNome() de pessoa,
mas não me retorna o valor do atributo.

O resultado deveria ser:
método: getNome
retorno: …retorno de testTestarRetorno()

Mas o retorno é:preciso de ajuda com o código abaixo.
…método: getNome
…retorno: null

Alguém pode me ajudar?

Obrigado.

Celso.


package teste;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class TesteInvoke {

public static String testarRetorno() {
   return "...retorno de testTestarRetorno()...";
}

public static void main(String[] args) throws IllegalAccessException, 
    IllegalArgumentException, InvocationTargetException  {
   
    Pessoa pessoa = new Pessoa();
    pessoa.setRg("M-35");preciso de ajuda com o código abaixo.
    pessoa.setNome("Maria Santiago");
    Method [] mPessoa = pessoa.getClass().getDeclaredMethods();
    for (int i = 0; i < mPessoa.length; i++) {
       if (mPessoa[i].getName().compareTo("getNome") == 0) {
          Object result = mPessoa[i].invoke(pessoa, new Object[]{});     
          System.out.println("método: " + mPessoa[i].getName());
          System.out.println("retorno: " + result);   
       }
    }
}

}

“Sou o que sou por aquilo que todos somos”.

Aquele método testTestarRetorno() dentro da classe TesteInvoke não é aplicavél.
Afinal de Contas o Reflection que você quer é em cima da classe Pessoa.
Mas você estava próximo do resultado correto.

Saida:

método: public java.lang.String teste.Pessoa.getRg()
retorno: M-35
método: public java.lang.String teste.Pessoa.getNome()
retorno: Maria Santiago

[code]package teste;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class TesteInvoke {

public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {

	Pessoa pessoa = new Pessoa();
	pessoa.setRg("M-35");
	pessoa.setNome("Maria Santiago");

	Method[] mPessoa = pessoa.getClass().getDeclaredMethods();
	CharSequence charSequence = "get";
	for (int i = 0; i < mPessoa.length; i++) {
		if (mPessoa[i].getName().contains(charSequence)) {
			Object result = mPessoa[i].invoke(pessoa, new Object[] {});
			System.out.println("método: " + mPessoa[i]);
			System.out.println("retorno: " + result);
		}
	}
}

}
[/code]

[code]package teste;

public class Pessoa {

private String rg = null;
private String nome = null;

public String getRg() {
	return rg;
}
public void setRg(String rg) {
	this.rg = rg;
}

public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}

}
[/code]

Voce nao precisa iterar sobre todos os metodos declarados da classe.
Usa o

getDeclaredMethod(String name, Class<?>... parameterTypes)

Obrigado, Jtsato e Fabio.

Celso.