Amigos bom dia.
Estou enfrentando o seguinte problema gostaria evitar um monte de IFs denescessarios na minha aplicação então estou tentando desenvolver chamada aos methodos dinamicos. Mais estou tendo grande dificuldades.
Segue exemplo:
public class Export extends HttpServlet{
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
Aprovisionamento aprov = new Aprovisionamento();
aprov.setDataInicial(dtInicial);
aprov.setDataFinal(dtFinal);
aprov.setBoolPaginacao(false);
AprovisionamentoDAO dao = new AprovisionamentoDAO();
List<Aprovisionamento> aprovs = dao.search(aprov);
Object obj;
String methodExport = "createXSL";
Method method = obj.getClass().getMethod(methodExport,new Class[]{HttpServletResponse.class , [b]List<Aprovisionamento>.class[/b]});
method.invoke(obj,new Object[]{response,aprovs});
}
}
Erro encontra-se na parte negrita do código.
desde ja obrigado.
Poderia mostrar um exemplo de como ficaria o item 1 e 2.
[quote=wellington.nogueira]Talvez você já tenha conseguido tua resposta, mas segue um exemplo:
[code]package br.com.teste.reflection;
import java.lang.reflect.Method;
public class Main {
public static void main(String[] args) {
instanciandoEExecutandoMetodo();
executandoMetodoDeObjetoInstanciado();
executandoMetodoEstatico();
}
private static void instanciandoEExecutandoMetodo() {
//Há duas formas de obter a instância de um objeto
try {
//Vou usar esta mas ambas funcionam.
Class classTesteMe1 = Class.forName("br.com.teste.reflection.TesteMe");
Class classTesteMe2 = TesteMe.class;
Method method = classTesteMe1.getMethod("method", String.class, Integer.TYPE);
Object obj = classTesteMe1.newInstance();
Object ret = method.invoke(obj, "valor", 0);
System.out.println(ret);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void executandoMetodoDeObjetoInstanciado() {
//Objeto instanciado. Se não fizer isso vai dar erro
TesteMe testeme = new TesteMe();
try {
//Para obter o método há duas formas.
//Vou usar esta mas ambas funcionam
Method method1 = testeme.getClass().getMethod("method", String.class, Integer.TYPE);
Method method2 = TesteMe.class.getMethod("method", String.class, Integer.TYPE);
Object ret = method1.invoke(testeme, "outro valor", 1);
System.out.println(ret);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void executandoMetodoEstatico() {
//Para este caso, o método é estático, logo não precisa de instância do objeto
try {
Method method3 = TesteMe.class.getMethod("staticMethod", String.class, Integer.TYPE);
Object staticret = method3.invoke(null, "static", 2);
System.out.println(staticret);
} catch (Exception e) {
e.printStackTrace();
}
}
}
class TesteMe {
public int method(String param, int retorno) {
System.out.println(param);
return retorno;
}
public static int staticMethod(String param, int retorno) {
System.out.println(param);
return retorno;
}
}[/code][/quote]
Starcraft, muito bom o seu exemplo.

No caso,
Primeiro vc precisa ter uma instância criada do objeto (vc declarou o objeto, mas não o instânciou).
Segundo, seu objeto precisa possuir os métodos que vai chamar.
Terceiro: use as tags CODE para melhorar a leitura de teu tópico.
Talvez você já tenha conseguido tua resposta, mas segue um exemplo:
[code]package br.com.teste.reflection;
import java.lang.reflect.Method;
public class Main {
public static void main(String[] args) {
instanciandoEExecutandoMetodo();
executandoMetodoDeObjetoInstanciado();
executandoMetodoEstatico();
}
private static void instanciandoEExecutandoMetodo() {
//Há duas formas de obter a instância de um objeto
try {
//Vou usar esta mas ambas funcionam.
Class classTesteMe1 = Class.forName("br.com.teste.reflection.TesteMe");
Class classTesteMe2 = TesteMe.class;
Method method = classTesteMe1.getMethod("method", String.class, Integer.TYPE);
Object obj = classTesteMe1.newInstance();
Object ret = method.invoke(obj, "valor", 0);
System.out.println(ret);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void executandoMetodoDeObjetoInstanciado() {
//Objeto instanciado. Se não fizer isso vai dar erro
TesteMe testeme = new TesteMe();
try {
//Para obter o método há duas formas.
//Vou usar esta mas ambas funcionam
Method method1 = testeme.getClass().getMethod("method", String.class, Integer.TYPE);
Method method2 = TesteMe.class.getMethod("method", String.class, Integer.TYPE);
Object ret = method1.invoke(testeme, "outro valor", 1);
System.out.println(ret);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void executandoMetodoEstatico() {
//Para este caso, o método é estático, logo não precisa de instância do objeto
try {
Method method3 = TesteMe.class.getMethod("staticMethod", String.class, Integer.TYPE);
Object staticret = method3.invoke(null, "static", 2);
System.out.println(staticret);
} catch (Exception e) {
e.printStackTrace();
}
}
}
class TesteMe {
public int method(String param, int retorno) {
System.out.println(param);
return retorno;
}
public static int staticMethod(String param, int retorno) {
System.out.println(param);
return retorno;
}
}[/code]