Estou com um problema, estou tentando acessar um método de uma classe de uma API que eu estou usando.
Mas esse método é protected e quando eu tento acessar diretamente, ele não funciona.
Estou com um problema, estou tentando acessar um método de uma classe de uma API que eu estou usando.
Mas esse método é protected e quando eu tento acessar diretamente, ele não funciona.
se a classe objeto extends “Classe_de_uma_API_que_vc_ta_usando”
para chamar métodos da classe mãe: (se o método é protected então a classe filha tem acesso direto, veja se não ta acontecendo nenhum nullpointer o algo do tipo)
objeto.meu_metodo_protected_da_api();
// se fosse casso de overload
super.nomeDoMetodo();
exemplo:
publicclassExHeranca{protectedvoidprintHello(){System.out.println("Hello");}publicstaticvoidmain(String[]args){Daughterdaughter=newDaughter();daughter.printHello();// vai imprimir "Hello"}}classDaughterextendsExHeranca{}
Marky.Vasconcelos
É possivel acessar métodos protecteds e private apor Reflection. Mas para que voce quer fazer isso?aa
nel
Boa tarde.
Mark, a questão de acessar métodos protected é possível bastando que a classe extenda da classe que possui o método protected, perfeito? Mas achei interessante o que citou, pelo o que tenho conhecimento, o private é o modo de acesso mais limitado, onde somente a propria classe tem acesso a suas variaveis e/ou métodos. Você disse que é possível acessar um método por Reflection, mesmo ele sendo private, poderia exemplicar como isto poderia ser feito?
Obrigado.
Abraços.
Marky.Vasconcelos
Classe exemplo
publicclassPessoa{privateStringgetDadosConfidenciais(){returndadosConfidenciais;//Imagine que este atributo exista.}}
Methodm=Pessoa.class.getDeclaredMethod("getDadosConfidenciais");m.setAccessible(true);Pessoap=newPessoa();Stringdados=(String)m.invoke(p);System.out.println(dados);//Aqui deve mostrar o resultado do método.
Lembre-se de try/caths no segundo código que passei.
nel
Perfeito Mark. Trabalha com metadados certo?
Desconhecia este método de utilização, mas no momento vejo somento uma utilidade para tal, quando você não possui acesso ao código fonte e necessita de um método dentro do .class que é privado, enfim, de qualquer forma agradeço o esclarecimento
Abraços.
Marky.Vasconcelos
Também é utilizado quando voce quer algo dinamico.
Não sei se voce já viu mas a ObjectTableModel usa Reflection para acessar os campos dos objetos.
nel
Mark_Ameba:
Também é utilizado quando voce quer algo dinamico.
Não sei se voce já viu mas a ObjectTableModel usa Reflection para acessar os campos dos objetos.
Na verdade não. Posso estar sendo ignorante, mas este Object é aplicado em Applets e Sistemas Desktop, estou certo? É que tenho um maior envolvimento com questões Web, como JSF, JSP e Flex.
Abraços.
Marky.Vasconcelos
Ah claro. É para sistemas desktop. para trabalhar com JTable.
Em Applets já me disseram que nao funcionou nao sei por que.
Rafael_Marques1
nel:
Perfeito Mark. Trabalha com metadados certo?
Desconhecia este método de utilização, mas no momento vejo somento uma utilidade para tal, quando você não possui acesso ao código fonte e necessita de um método dentro do .class que é privado, enfim, de qualquer forma agradeço o esclarecimento
Abraços.
aliás, vc consegue alterar um atributo diretamente com isso tbm!