porem sempre obtenho o erro de NoSuchMethod bla bla bla, dizendo q o metodo nao existe na classe e tals… Ai eu peço, como eu acesso via reflection esse metodo herdado??
voce vai ter que ir subindo na hierarquia e procurar o metodo.
T
thingol
getDeclaredMethod só retorna um método que esteja declarado na própria classe que você está chamando. Eu vi que não dá para usar getMethod porque ele só retorna métodos públicos. Olhe o que ocorre…
importjava.lang.reflect.*;classA{protectedvoidprotectedMethod(){System.out.println("This is a protected method called from "+getClass().getName());}publicStringtoString(){return"A";}}classBextendsA{publicStringtoString(){return"B";}}classCextendsB{publicStringtoString(){return"C";}}classTesteProtectedComReflection{publicstaticvoidmain(String[]args)throwsException{Class<?>klass=C.class;Methodm=null;while(m==null&&klass!=Object.class){try{m=klass.getDeclaredMethod("protectedMethod",newClass[]{});}catch(NoSuchMethodExceptionex){klass=klass.getSuperclass();}}if(m!=null){System.out.println(m);// imprime "protected void A.protectedMethod()"m.invoke(newC());// imprime "This is a protected method called from C"}else{System.out.println("Method was not found in class C");}}}
D
didiosam
opa, entao obrigado aos dois ai …
eu tb tinha descoberto aqui que o getMethod nao ia dá prq ele só retorna os metodos publicos, mas eu achava q o getDeclaredMethod retornava todos (public, private, protected) inclusive os herdados … bom, vivendo e aprendendo
bom de qualquer forma resolvi de forma semelhante ai ao que voce postou thingol, percorrendo a hierarquia de baixo pra cima conforme o Mark_Ameba havia dito …