Acessar método protected de uma API

11 respostas
R

Fala pessoal,

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.

por exemplo.

Classe objeto;
objeto.meu_metodo_protected_da_api();

ele nao acessa, como eu devo fazer?

11 Respostas

ArchV

renatomolina:
Fala pessoal,

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.

por exemplo.

Classe objeto;
objeto.meu_metodo_protected_da_api();

ele nao acessa, como eu devo fazer?

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:

public class ExHeranca
{
    protected void printHello()
    {
        System.out.println("Hello");
    }
    public static void main(String[] args)
    {
        Daughter daughter = new Daughter();
        daughter.printHello(); // vai imprimir "Hello"
    }

}

class Daughter extends ExHeranca
{
  
}
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

public class Pessoa{
private String getDadosConfidenciais(){
return dadosConfidenciais;//Imagine que este atributo exista.
}
}
Method m = Pessoa.class.getDeclaredMethod("getDadosConfidenciais");
m.setAccessible(true);
Pessoa p = new Pessoa();
String dados = (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? :slight_smile:
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 :slight_smile:

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? :slight_smile:
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 :slight_smile:

Abraços.

aliás, vc consegue alterar um atributo diretamente com isso tbm!

reflection é coisa do demo! hahahahaha

Marky.Vasconcelos

É… reflection é perigoso. Mas poderoso.

lina

Oi,

Tudo culpa da maconha… rsrs

Tchauzin!

Criado 31 de janeiro de 2010
Ultima resposta 2 de fev. de 2010
Respostas 11
Participantes 6