Generics

14 respostas
matheus306

Ola pessoal… estou dando uma estudada em generics…
Tem uma coisa que não consigo entender. Onde eu trabalho na hora de criar um crud eu faço o seguinte.

public class Exemplo extends GenericDAO<Pessoa>{

}

Agora eu estou querendo, so para estudar mermo, criar uma DAO simples so pra ver funcionando. Ai comecei assim.

public class Persistencia<BEAN> {
    
    protected Class<BEAN> clazz;
    
    public Persistencia(Class<BEAN> clazz){
        this.clazz = clazz;
    }

Extendendo a minha classe Persistencia

public class ExecuteQueryDAO extends Persistencia<Funcionario>{

}

Só que se eu coloco este construtor na classe persistencia ele dá erro de compilação, se eu não coloco a variável CLAZZ fica nula! Alguem pode me dar um help??
abraço a todos

14 Respostas

ViniGodoy

Seu construtor deve aceitar class de bean e de filhos de bean?

Então a declaração correta é Class<? extends BEAN>

matheus306

Não não!!! a minha ideia seria criar um DAO para o objeto Funcionário (FuncionarioDAO) e extender o Persistence.

public class FuncionarioDAO extends Persistence&lt;Funcionario&gt;{

}
ViniGodoy

Que erro de compilação dá?

matheus306

o mesmo erro quando agente cria um public static void main sem o void!!

ViniGodoy

Posta o código todo aí. Sem você falar o erro, ou mostrar exatamente como está o seu programa fica difícil!

matheus306

Viny está na minha máquina da faculdade!! vou postar hoje a noite, pode ser??

mas a minha ideia mesmo era a seguinte: (eu não sei se estou viajando na maionese)

Quando eu crio uma classe que será extendida e declaro assim:

public class Exemplo&lt;Isto aki.&gt;{}

Onde eu escrevi "Isto aki ", receberá este valor quando eu extendo.???

public class ClasseFilha&lt;EsteValor&gt;

Se sim, este valor deve ser setado, no contrutor, em uma variável da classe?

ViniGodoy

Eu ainda não entendi exatamente o que você quer fazer.

Depois que você colocar ou código, eu vejo como sua classe estende a outra e o que você está tentando fazer. Eu tenho um DAO que ficou muito similar, e também usa generics. Mas não sei se vc está usando da mesma forma que eu, então fica difícil dizer.

matheus306

o seu DAO implementa alguns métodos que fazer a persistência certo? ele monta uma query apartir dos atributos de clarados em uma classe?

o que eu quero e fazer um dao em que eu vou montar as query’s pegando os atributos declarados na classe. Por isso a necessidade de extender e apontar a classe.

ViniGodoy
Nesse caso, você não precisa que sua superclasse seja genérica. Só que o parâmetro recebido seja:
public class Persistencia {   
       
    protected Class&lt;?&gt; clazz;   
       
    public Persistencia(Class&lt;?&gt; clazz){   
        this.clazz = clazz;   
    }  
}

Aí vc usa reflection normalmente sobre o seu objeto clazz.

matheus306

Pois é!! assim até funcionou!! so que, a minha ideia é usar isto como aprendizado em generics. e também pra compreender melhor o frame que eu uso!

vc acha que assim fica legal?? Instanciando um objeto?

ViniGodoy

Você sempre vai precisar instanciar um objeto.

matheus306

Sim, mas quando eu extendo isto fica implicito? Não?!

ViniGodoy

Acho que não, hein?

Como eu falei, ficaria mais fácil ver o q vc está confundindo se tivesse um pouco mais de código.

matheus306

Blz Vinny!!

Vou mandar assim que chegar na faculdade!!!

so que, não tem muita coisa fora isto que eu postei na primeira vez não!!! Estou começando a fazer agora!!!

Criado 17 de setembro de 2008
Ultima resposta 18 de set. de 2008
Respostas 14
Participantes 2