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”.
jtsato
Abril 8, 2008, 7:10pm
#2
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.