Reflection - Passando um método como parâmetro - problemas com o cast [RESOLVIDO]
14 respostas
kweles
Olá Pessoal!
Estou lendo todos os métodos “get” de uma classe através do reflection, e preciso passar o valor destes como parâmetro
em um preparedstatement. Mas não estou conseguindo fazer o cast para int.
//Função q retorna o métodopublicMethodgetMethod(ObjectOClass,Stringpmethodname){Method[]methods=OClass.getClass().getDeclaredMethods();Methodm=null;
Você deve converter para Integer, não int. E depois o autoboxing converterá para int.
Outra coisa. Quando for postar código, por favor, use a tag code:
seucódigoaqui
Senão fica quase impossível de ler.
kweles
[quote=rogelgarcia]Ao inves de fazer assim
stmt.setInt(x,????);//como faco para convertê-lo
faz assim:
stmt.setObject(x,????);
Olá Rogélgarcia!
Puxa assim ficou muito prático, contudo um dos campos de minha classe é do tipo Calendar, e quando chega neste campo
o java dá erro informando: “The Java type java.util.GregorianCalendar is not a supported type”.
Sempre quando tenho um tipo calendar faço um tratamento específico:
Neste Caso eu precisaria verificar se o parâmetro q está sendo passado é do tipo calendar e fazer o tratamento.
Como poderia fazer isto? Pq neste caso eu necessitaria fazer a conversão do método para o tipo específico.
kweles
wellington.nogueira:
kweles:
publicvoidinsert(ObjectOClass){try{PreparedStatementstmt=conn.prepareStatement(sqlInsert);//nesta parte é que estou enrolado getMethod(OClass,"get"+Fields[2][x]).invoke(OClass,newInteger(0));stmt.setInt(x,????);//como faco para convertê-lo....}
O invoke retorna um objeto mas você não está guardando numa variável (seria '???' ?)
Outra coisa, no método getMethod, você está passando pmethodname que é a concatenação de
"get"+Fields[2][x]
Devo crer que Fields[][] seja um array de Strings que representam o nome dos atributos o objeto OClass e a primeira letra é maiúscula (mas creio que sim, baseando-se na notação que utiliza).
acho q ficaria assim
Exatamente, minha idéia e fazer uma classe q possua o crud onde eu possa herdá-la em outras e apenas passar o nome da tabela do banco e o crud esteja pronto.
Bem se seguir nesta linha q vc mostrou, precisarei fazer alguns if´s para comparar e converter cada tipo.
Vou tentar desta forma e envio o retorno
Obrigado pelo help!
kweles
wellington.nogueira:
kweles:
publicvoidinsert(ObjectOClass){try{PreparedStatementstmt=conn.prepareStatement(sqlInsert);//nesta parte é que estou enrolado getMethod(OClass,"get"+Fields[2][x]).invoke(OClass,newInteger(0));stmt.setInt(x,????);//como faco para convertê-lo....}
O invoke retorna um objeto mas você não está guardando numa variável (seria '???' ?)
Outra coisa, no método getMethod, você está passando pmethodname que é a concatenação de
"get"+Fields[2][x]
Devo crer que Fields[][] seja um array de Strings que representam o nome dos atributos o objeto OClass e a primeira letra é maiúscula (mas creio que sim, baseando-se na notação que utiliza).
acho q ficaria assim
Pessoal tem algum meio de eu marcar como respondido este post?
Valeu
kweles
…
Marky.Vasconcelos
Edita a primeira mensagem e coloca no assunto [RESOLVIDO]
kweles
Olá Mark!
Muito interessante, já havia visto algo sobre anotations, mas gostei!
Apesar que não vi no artigo a parte de conexão com o banco e o crud.
É possível eu baixar o projeto do artigo para estudo?
Muito Obrigado!
Marky.Vasconcelos
Olá Mark!
Muito interessante, já havia visto algo sobre anotations, mas gostei!
Apesar que não vi no artigo a parte de conexão com o banco e o crud.
É possível eu baixar o projeto do artigo para estudo?
Muito Obrigado!
Que?!
Essa não entendi.
Se voce tiver se referindo ao Mark-Utils voce baixa do GoogleCode. E eu também estou escrevendo um artigo sobre Reflection que um dia eu postarei.
kweles
Olá Mark!
Muito interessante, já havia visto algo sobre anotations, mas gostei!
Apesar que não vi no artigo a parte de conexão com o banco e o crud.
É possível eu baixar o projeto do artigo para estudo?
Muito Obrigado!
Que?!
Essa não entendi.
Se voce tiver se referindo ao Mark-Utils voce baixa do GoogleCode. E eu também estou escrevendo um artigo sobre Reflection que um dia eu postarei.
publicvoidinsert(ObjectOClass){try{PreparedStatementstmt=conn.prepareStatement(sqlInsert);//nesta parte é que estou enrolado getMethod(OClass,"get"+Fields[2][x]).invoke(OClass,newInteger(0));stmt.setInt(x,????);//como faco para convertê-lo....}
O invoke retorna um objeto mas você não está guardando numa variável (seria '???' ?)
Outra coisa, no método getMethod, você está passando pmethodname que é a concatenação de
"get"+Fields[2][x]
Devo crer que Fields[][] seja um array de Strings que representam o nome dos atributos o objeto OClass e a primeira letra é maiúscula (mas creio que sim, baseando-se na notação que utiliza).
acho q ficaria assim