String set = method.getName().substring(0, 3);
if (set.equals("set")) {
}
grato.
String set = method.getName().substring(0, 3);
if (set.equals("set")) {
}
grato.
Você pode utilizar o método invoke. Ele recebe um Object que representa o objeto que vai invocar o método e um vararg de Object que representam os parâmetros passados.
method.invoke(caller, arg1, arg2, argn); //caller é o objeto que vai invocar o método e os args são os parâmetros.
//Isto tem o efeito de caller.nomeDoMetodo(arg1, arg2, argn);
Só lembre que se o método não for acessível pelo objeto que for passado será disparada uma exceção a menos que você torne o método acessível:
method.setAccessible(true);
Criei uma pequena biblioteca que ajuda com Reflection se interessar: http://code.google.com/p/mikhas/wiki/Refractor
Pergunta: voce usa o reflection no dia a dia pra manipulação de campos, tava pesquisando sobre isso e foi desemcorajado, gostaria de mais imformações sobre isso.
quando eu executo da o seguinte erro:
SEVERE: null
java.lang.IllegalArgumentException: argument type mismatch
Você está passando o tipo incorreto para o método
coloca ai seu código
consegui arrumar…agora to com outro probleminha…eu passo uma lista de textField, dae eu pego por exemplo…
lista.get(0).getText();
porem o tipo pode ser int, como que vou distinguir esses valores…sendo que qndo uso o getText() ele tranforma tudo em string …grato.
não teria outra maneira para verificar o tipo do parametro do metodo
Method[] metodos = cl.getDeclaredMethods();
for (Method method : metodos) {
//aqui eu varo todos os metodos da classe..
// como que faço para saber o tipo do parametro.. se é int, boolean ....????????
}
certo agora eu já consigo pegar o retorno que é VOID, agora como que faço para saber o parametro passado no metodo…?
por exemplo…
public void setAno(int){} como que pego o INT?
consegui…
Class[] classs = method.getParameterTypes();
Pergunta: voce usa o reflection no dia a dia pra manipulação de campos, tava pesquisando sobre isso e foi desemcorajado, gostaria de mais imformações sobre isso.
Acho estranho isso ser desencorajado. Praticamente todos os frameworks fazem dessa forma. Poderia apontar onde você viu a respeito? Fiquei bastante curioso com essa afirmação.
O que não se deve é usar Reflection pra qualquer coisa. Geralmente usamos Reflection para generalização, daí o fato de ele ser amplamente usado em frameworks.
Se você está desenvolvendo um código com uma regra de negócio dificilmente irá usar Reflection pra manipular algum campo.
A biblioteca faz um tanto mais de coisas, mas fiquei com um pouco de preguiça de escrever mais exemplos. Vou gerar o javadoc para ajudar.
Sobre metodos, da para fazer coisas como:
// Lista os metodos do meu objeto
Refractor.reflect(MEU_OBJETO).methods();
// Invoca metodo sem ter conhecimento dos tipos dos parametros
Refractor.reflect(MEU_OBJETO).method("setNome").invoke("Mikhail");
// Invoca metodo com tipo de parametro especificado
Refractor.reflect(MEU_OBJETO).method("setNome",String.class).invoke("Mikhail");
// Invoca um metodo sem parametros
Refractor.reflect(MEU_OBJETO).method("destroy").invoke();
// Lista as annotations de um metodo chamado "init" que não possui argumentos/parametros
Refractor.reflect(MEU_OBJETO).method("init").withoutArgs().annotations();
Normalmente eu não uso reflection no dia-a-dia, apenas quando preciso criar algum componente mais dinamico e complexo, ai vem a calhar.
Você pode usar uma expressão regular buscando por qualquer coisa que não seja número. Se retornar uma String vazia, significa que é número e você pode fazer um parse ou pode simplesmente fazer um parse para inteiro (crie um método para isso). Se der parseException, o valro utilizado não é numérico.
PS: Eu desencorajo qualquer tentativa de usar exceções como se fosse um if mas se precisar de uma solução rápida…
Mikhas, não vi pelos exemplos, muitas vantagens em usar a biblioteca em relação ao uso direto da API Java.
josue carrecon, não é que o uso é desencorajado, é que, se você têm acesso aos métodos públicos de uma determinada classe, não há porque utilizar reflexão. Seu uso é específico, normalmente para automações de ações (como ler um XML e atribuir os valores obtidos automaticamente a um objeto).
Method m;
m.getReturnType()
http://download.oracle.com/javase/6/docs/technotes/guides/reflection/index.html