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.
Poderia mostrar um exemplo de como ficaria o item 1 e 2.
J
Jesuino_Master
wellington.nogueira:
Talvez você já tenha conseguido tua resposta, mas segue um exemplo:
packagebr.com.teste.reflection;importjava.lang.reflect.Method;publicclassMain{publicstaticvoidmain(String[]args){instanciandoEExecutandoMetodo();executandoMetodoDeObjetoInstanciado();executandoMetodoEstatico();}privatestaticvoidinstanciandoEExecutandoMetodo(){//Há duas formas de obter a instância de um objetotry{//Vou usar esta mas ambas funcionam.ClassclassTesteMe1=Class.forName("br.com.teste.reflection.TesteMe");ClassclassTesteMe2=TesteMe.class;Methodmethod=classTesteMe1.getMethod("method",String.class,Integer.TYPE);Objectobj=classTesteMe1.newInstance();Objectret=method.invoke(obj,"valor",0);System.out.println(ret);}catch(Exceptione){e.printStackTrace();}}privatestaticvoidexecutandoMetodoDeObjetoInstanciado(){//Objeto instanciado. Se não fizer isso vai dar erroTesteMetesteme=newTesteMe();try{//Para obter o método há duas formas.//Vou usar esta mas ambas funcionamMethodmethod1=testeme.getClass().getMethod("method",String.class,Integer.TYPE);Methodmethod2=TesteMe.class.getMethod("method",String.class,Integer.TYPE);Objectret=method1.invoke(testeme,"outro valor",1);System.out.println(ret);}catch(Exceptione){e.printStackTrace();}}privatestaticvoidexecutandoMetodoEstatico(){//Para este caso, o método é estático, logo não precisa de instância do objetotry{Methodmethod3=TesteMe.class.getMethod("staticMethod",String.class,Integer.TYPE);Objectstaticret=method3.invoke(null,"static",2);System.out.println(staticret);}catch(Exceptione){e.printStackTrace();}}}classTesteMe{publicintmethod(Stringparam,intretorno){System.out.println(param);returnretorno;}publicstaticintstaticMethod(Stringparam,intretorno){System.out.println(param);returnretorno;}}
Starcraft, muito bom o seu exemplo.
:)
W
WellingtonRamos
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.
W
WellingtonRamos
Talvez você já tenha conseguido tua resposta, mas segue um exemplo:
packagebr.com.teste.reflection;importjava.lang.reflect.Method;publicclassMain{publicstaticvoidmain(String[]args){instanciandoEExecutandoMetodo();executandoMetodoDeObjetoInstanciado();executandoMetodoEstatico();}privatestaticvoidinstanciandoEExecutandoMetodo(){//Há duas formas de obter a instância de um objetotry{//Vou usar esta mas ambas funcionam.ClassclassTesteMe1=Class.forName("br.com.teste.reflection.TesteMe");ClassclassTesteMe2=TesteMe.class;Methodmethod=classTesteMe1.getMethod("method",String.class,Integer.TYPE);Objectobj=classTesteMe1.newInstance();Objectret=method.invoke(obj,"valor",0);System.out.println(ret);}catch(Exceptione){e.printStackTrace();}}privatestaticvoidexecutandoMetodoDeObjetoInstanciado(){//Objeto instanciado. Se não fizer isso vai dar erroTesteMetesteme=newTesteMe();try{//Para obter o método há duas formas.//Vou usar esta mas ambas funcionamMethodmethod1=testeme.getClass().getMethod("method",String.class,Integer.TYPE);Methodmethod2=TesteMe.class.getMethod("method",String.class,Integer.TYPE);Objectret=method1.invoke(testeme,"outro valor",1);System.out.println(ret);}catch(Exceptione){e.printStackTrace();}}privatestaticvoidexecutandoMetodoEstatico(){//Para este caso, o método é estático, logo não precisa de instância do objetotry{Methodmethod3=TesteMe.class.getMethod("staticMethod",String.class,Integer.TYPE);Objectstaticret=method3.invoke(null,"static",2);System.out.println(staticret);}catch(Exceptione){e.printStackTrace();}}}classTesteMe{publicintmethod(Stringparam,intretorno){System.out.println(param);returnretorno;}publicstaticintstaticMethod(Stringparam,intretorno){System.out.println(param);returnretorno;}}